【发布时间】:2012-12-02 10:05:43
【问题描述】:
我正在为客户从 Rails 2.x 重写/重构遗留应用程序到 3.x。作为重构的一部分,我还想从使用我们当地语言的模型/方法转向纯英文代码库。
这涉及为几乎每个功能编写新方法。我通过以下方法解决了这个问题:
def english_method
# ...
end
def native_method
warn 'DEPRECATED, please use #english_method'
english_method
end
这适用于方法,并帮助我跟踪仍在使用旧方法的地方,而不会破坏任何代码。
但是,对于类(模型),我一直在做:
class NativeClass < EnglishClass
# DEPRECATED, Please use EnglishClass
end
class EnglishClass
# ...
end
这个“工作”,每当调用NativeClass 时,应用程序继续工作,但我在日志中没有收到任何消息通知我应用程序的一部分仍在调用NativeClass。
如何确保每次“触摸”NativeClass 都会导致写入日志错误?
我尝试过(除了想“也许这行得通”之外没有其他原因):
class NativeClass < EnglishClass
-> { ActiveSupport::Deprecation.warn 'Native model is deprecated in favor of English' }
end
但这(显然?)没有用。我认为每次调用 NativeClass 时 lambda 都会延迟加载,但我对 lambdas 的理解仍然有些肤浅,所以在这里我可能会误会。
关于如何弃用整个类并在我的日志被触摸时向我的日志发送警告消息的任何线索?
欢迎使用其他“最佳做法”和/或弃用解决方案,但我不确定这是否是 SO 的有效问题(我不想冒着因这个问题而关闭该主题的风险)。
【问题讨论】:
标签: ruby-on-rails class model deprecated