2011-01-25 16 views
17

Me gustaría hacer algo de magia en el momento instancia y los métodos de clase se agregan a alguna clase. Por lo tanto, he intentado lo siguiente:Understanding method_added for class methods

module Magic 
    def self.included(base) 
    base.extend ClassMethods 
    end 
    module ClassMethods 
    def method_added(name) 
     puts "class method '#{name}' added" 
    end 
    def some_class_method 
     puts "some class method" 
    end 
    end 
end 

class Foo 
    include Magic 
    def self.method_added(name) 
    puts "instance method #{name} added" 
    end 
end 

Este enfoque funciona bien para los métodos de instancia, falla por métodos de clase. ¿Cómo puedo resolver eso? ¿Alguna sugerencia?

Respuesta

24

que están en busca de singleton_method_added:

module Magic 
    def self.included(base) 
    base.extend ClassMethods 
    end 
    module ClassMethods 
    def method_added(name) 
     puts "instance method '#{name}' added" 
    end 

    def singleton_method_added(name) 
     puts "class method '#{name}' added" 
    end 
    end 
end 

class Foo 
    include Magic 

    def bla 
    end 

    def blubb 
    end 

    def self.foobar 
    end 
end 

Salida:

instance method 'bla' added 
instance method 'blubb' added 
class method 'foobar' added 

disfrutar!

+1

Salvavidas. ¡Gracias! – GeorgieF