我正在为从 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
但这(显然?)不起作用。我认为 lambda 每次都会被延迟加载
NativeClass
被调用了,但是我对 lambdas 的理解还是有些肤浅,所以我在这里可能会误会。关于如何弃用整个类并在我的日志被触摸时向我的日志发送警告消息的任何线索?
欢迎使用其他“最佳实践”和/或弃用解决方案,但我不确定这是否是 SO 的有效问题(我不想冒着因这个问题而关闭此主题的风险)。
最佳答案
尝试使用像:
class NativeClass < EnglishClass
def initialize
ActiveSupport::Deprecation.warn "NativeClass is deprecated and may be removed from future releases, use EnglishClass instead.", caller
super
end
end
关于ruby-on-rails - 在 Rails 中弃用整个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668262/