On Mon, 29 Nov 2004 22:49:57 +0900, Francis Hwang <sera / fhwang.net> wrote:
> Is there a way to capture whenever a class method is added either to a
> base class or its children? For example, if my code is

This seems to work, but it provides interesting results:

    class A
      class << self
        def singleton_method_added(sym)
          puts "+++A.#{sym}"
        end

        def inherited(klass)
          class << klass
            define_method(:singleton_method_added) do |sym|
              puts "++#{self}.#{sym}"
              super
            end
          end
        end
      end
    end

    class B < A
      def foo
        puts "Bfoo"
      end
    end

    def A.foo; puts "Afoo"; end

    class C < B; end
    def C.foo; puts "Cfoo"; end

C:\home>inherit.rb
+++A.singleton_method_added
+++A.inherited
++B.singleton_method_added
+++A.B
+++A.foo
++C.singleton_method_added
++C.C
+++A.B
++C.foo
++C.C
+++A.B

C:\home>ruby -v
ruby 1.8.2 (2004-07-29) [i386-mswin32]

-austin
-- 
Austin Ziegler * halostatue / gmail.com
               * Alternate: austin / halostatue.ca