我正在为从 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 的有效问题(我不想冒着因这个问题而关闭该主题的风险)。