2013-01-31 53 views
2

我有一個模塊,可以在添加到類中時添加類方法。將類方法添加到ruby中的現有模塊中

我想強制這個模塊通過編寫第一個包含的另一個模塊來擴展新的方法。

下面的代碼給出了我想要做的事情的一個例子: 能夠重寫第一個模塊的「self.included」函數以擴展我的方法的基礎會很棒。

到目前爲止,我是能夠覆蓋第一模塊的self.included功能,但調用超不工作,所以我失去了第一個模塊的類方法:

module SomeModule 

    def self.included(base) 
    base.send(:extend, ClassMethods) 
    end 

    module ClassMethods 

    # Some methods 

    end 

end 


module MyNewModule 

def self.included(base) 
    base.class_eval do 
     def self.included(base) 
     base.send(:extend, ClassMethods) 
     super(base) 
     end 
    end 
    end 

    module ClassMethods 

    def my_method 
    end 

    end 

end 

SomeModule.send(:include, MyNewModule) 

class Pouet 

    include SomeModule 

    my_method # undefined local variable or method `my_method' for Pouet:Class (NameError) 

end 

這可能嗎?

回答

0

最後設法讓它通過自己的工作。

請告訴我,如果這是一個好的或壞的做法:

module SomeModule 

    def self.included(base) 
    base.send(:extend, ClassMethods) 
    end 

    module ClassMethods 

    def my_original_method 
    end 

    # Some methods 

    end 

end 


module MyNewModule 

    def self.included(base) 
    base.class_eval do 

     class << self 

     alias_method :old_included, :included 

     def included(base) 
      old_included(base) 
      base.send(:extend, ClassMethods) 
     end 

     end 

    end 
    end 

    module ClassMethods 

    def my_method 
    end 

    end 

end 

SomeModule.send(:include, MyNewModule) 

class Pouet 

    include SomeModule 

    my_original_method 
    my_method 

end 
相關問題