出展: リファクタリング:Rubyエディション に掲載されていたコードを写経(出力されるメッセージなどは適当に変更している)。
以下のように Module クラスに deprecate メソッドを定義する。
module_ext.rb
class Module
def deprecate(method_name)
module_eval <<-END
alias_method :deprecated_#{method_name}, :#{method_name}
def #{method_name}(*args, &block)
$stderr.puts "Warning: #{self}##{method_name} メソッドは将来的に廃止される予定のため非推奨です!!!"
deprecated_#{method_name}(*args, &block)
end
END
end
end
以下のように、非推奨(deprecate) とするメソッド名をシンボルで渡す。
hoge.rb
class Hoge
def fuga
puts "やほー!!!"
end
deprecate :fuga
end
実行結果:
hoge = Hoge.new
hoge.fuga
Warning: Hoge#fuga メソッドは将来的に廃止される予定のため非推奨です!!!
やほー!!