31
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

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

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

31
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?