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
の理解はまだ浅いので、ここで間違っている可能性があります。
クラス全体を非推奨にし、ログに触れたときに警告メッセージをログに送信する方法の手がかりはありますか?
他の「ベストプラクティス」や非推奨の解決策は歓迎されますが、それが SO にとって有効な質問であるかどうかはわかりません (このトピックがこの質問のために閉じられる危険を冒したくありません)。