Rails

railsのdeprecateってメソッドが便利ぽい

More than 3 years have passed since last update.

リファクタしていると、このメソッド名やばい変えたいという気持ちが高まるケースが多々あると思います。

そんなの、 徹底的に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も内部で使っているのがあるだろうという予想から調べてみたら見つけたのでせっかくだし、それ使ってみるかという感じです。

メソッドの中ではなく外に書けるのは便利かなーと思いました。