Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Module | method_added

概要

Module#method_added(name) -> ()

詳細

メソッド name が追加された時にインタプリタがこのメソッドを呼び出します。

このメソッドをオーバーライドすることで、メソッド追加時に任意の処理を実行できる。

サンプルコード
class Hoge
  def self.method_added(name)
    return if name.to_s.start_with?('new_')
    puts "start method_added => #{name}"
    alias_method :"new_#{name}", name
    puts "\tcreate alias new_#{name} for #{name}"
    puts "end method_added => #{name}"
  end

  %w{hoge hige hage}.each do |m|
    define_method m.to_sym do
      puts m
    end
  end
end

hoge = Hoge.new
%w{hoge hige hage}.each do |m|
  hoge.send(m.to_sym)
  hoge.send(:"new_#{m}")
end

出力

$ ruby method_added.rb
start method_added => hoge
        create alias new_hoge for hoge
end method_added => hoge
start method_added => hige
        create alias new_hige for hige
end method_added => hige
start method_added => hage
        create alias new_hage for hage
end method_added => hage
hoge
hoge
hige
hige
hage
hage