大まかに .singleton_method_added、.method_added, #singleton_method_added の3つを使い分ければいい感じですかね。
[コード]
class X # クラスメソッドを定義した時に呼び出される def self.singleton_method_added name p "class method : #{name}" end # クラスのインスタンスメソッドを定義した時に呼び出される def self.method_added name p "instance method : #{name}" end # クラスインスタンスの特異メソッドを定義した時に呼び出される def singleton_method_added name p "singleton method : #{name}" end end x = X.new # インスタンスオブジェクトに対する特異メソッドを定義しても呼び出されない def x.mami end
[出力]
"class method : singleton_method_added" "class method : method_added" "instance method : singleton_method_added" "singleton method : mami"