2015-08-21 75 views
0

我正在使用功能標誌使用flip gem的Rails項目。我們都有一個要素類中,你可以聲明要使用不同的功能標誌,通過在「包含」方法中評估模塊化類級方法調用

# app/models/feature.rb 

class Feature < ActiveRecord::Base 
    extend Flip::Declarable 
    strategy Flip::DeclarationStrategy 

    feature :ivans_feature_A 
    feature :ivans_feature_B 
    feature :ivans_feature_C 

    feature :kramers_feature_X 
    feature :kramers_feature_X 
end 

隨着項目的發展,所以做的,我們已經有了在這個文件中聲明的特徵標誌的數量。一位同事建議我們將相關的特徵聲明分解成單獨的模塊來組織事物。

我發現了一種方法來做到這一點,但它不是我見過的模式,所以我不知道是否有更標準的方法。我定義的功能,每串命名空間模塊,我想組合到一起:

應用/型號/功能/ ivans_features.rb

module Features::IvansFeatures 
    def self.included(base) 
    base.feature :ivans_feature_A 
    base.feature :ivans_feature_B 
    base.feature :ivans_feature_C 
    end 
end 

應用/型號/功能/ kramers_features.rb

module Features::KramersFeatures 
    def self.included(base) 
    base.feature :kramers_feature_X 
    base.feature :kramers_feature_Y 
    end 
end 

...並讓他們參與特徵模型:

# app/models/feature.rb 

class Feature < ActiveRecord::Base 
    extend Flip::Declarable 
    strategy Flip::DeclarationStrategy 

    include Features::IvansFeatures 
    include Features::KramersFeatures 
end 

是很奇怪混合模塊爲了使用included回調在類上運行一些方法調用的唯一目的而進入類中?

回答

1

在你Feature類,你可以extend ActiveSupport::Concern,然後像做

included do 
    feature :kramers_feature_X 
end 
+0

偉大的作品,謝謝 – ivan