2015-08-21 43 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