2011-08-05 46 views
0

我正在實現一個半重複的Rails管道,通過重構一個現有的Ruby類,比如說A,它擴展了ActiveRecord,使一個模塊(如M)具有通用功能,然後成爲混合成兩個類似的AR類,現在是淺層包裝。將方法混合到當前類的本徵類

當把A的肉切成M時,A的實例方法簡單地成爲M中的方法,而A的類方法進入M的ClassMethods子模塊,在自身的類級別混合回A包括M的鉤子並通過着名的成語延伸。

但是,A不僅僅是任何類 - 我們使用DelayedJob的一些類方法,它並不理解類方法;因此,我們有些感動的原始類的方法分爲A的eigenclass,將它們定義爲

class A 
    ... 
    def old_plain_vanilla_class_method 
    ... 
    end 
    class << self 
    def new_eigenclassed_class_method 
     ... 
    end 
    ... 
    end 
    ... 
end 

現在的問題是,我們如何代表,在男,所以它混合右後衛A的eigenclass?

回答

1

不知道,我明白你的好(更多的代碼,請),但你不能做這樣的事情:

module M 
    def M.included(c) 
    class << c.class 
     def foo 
     "foo" 
     end 
    end 
    end 
end 
+0

作品,如果用C代替c.class,並M.included與self.included 。 – Alexy

相關問題