リファクタしていると、このメソッド名やばい変えたいという気持ちが高まるケースが多々あると思います。
そんなの、 徹底的にgrepすればいい し、 テスト書いてるだろ? って話なんですが、特に後者に対して「お、ぉう」となるケースがありうると思っていて、「このメソッド名変えたら誰か困る人がいるかもしれない。。。」という気持ちにより、心が折れるのはつらいですよね。
alias_method
でとりあえず逃げる事もできますが、あとでリファクタしたいよねというケース。
そんなときは、こんな感じでwarningを出す事があるかなーと思っています。
before.rb
def suck_method_name
puts "I'm cool"
end
after.rb
def suck_method_name
log_deprecated_message(__method__)
cool_method_name
end
def cool_method_name
puts "I'm cool"
end
private
# ナンカもっと共通部分に置くであろう
def log_deprecated_message(method_name)
logger.warn "#{method_name}? is deprecated"
end
railsのdeprecateを使う
before.rb
def suck_method_name
puts "I'm cool"
end
after.rb
def suck_method_name
cool_method_name
end
def cool_method_name
puts "I'm cool"
end
deprecate(suck_method_name: 'use suck_method_name', deprecator: MyDeprecator.new)
lib/my_deprecator.rb
# おれの Deprecator
class MyDeprecator
def deprecation_warning(deprecated_method_name, message, caller_backtrace = nil)
message = "#{deprecated_method_name} is deprecated and will be removed | #{message}"
Kernel.warn message
end
end
どっちがいいのやら
多分実装にかかる時間はあまり変わらないですが、railsも内部で使っているのがあるだろうという予想から調べてみたら見つけたのでせっかくだし、それ使ってみるかという感じです。
メソッドの中ではなく外に書けるのは便利かなーと思いました。