2016-03-08 49 views
0

我想包含一個模塊也傳遞一個配置塊。將塊傳遞給包含模塊的鉤子

現在,我有這樣的事情

class Check 
    include Zabase::ObjectPrinter 
    pp_values :title 
end 

因爲我不想污染Check類的命名空間,我想用一個DSL塊這樣的:

class Check 
    include Zabase::ObjectPrinter do 
    pp_values :title 
    end 

    # calling pp_values here should fail 
end 

是有可能實現這一點?我看到self.included未收到該塊。

回答

3

常見的方式來實現,這將是:

module Zabase::ObjectPrinter 

    # ... 

    def self.included base 
    base.extend ClassMethods 
    end 

    module ClassMethods 
    def zabase_configure &block 
     instance_eval(&block) if block_given? 
    end 
    end 
end 

然後

class Check 
    include Zabase::ObjectPrinter 

    zabase_configure do 
    ... 
    end 
end