Featuryのフィーチャーオブジェクト
フィーチャーオブジェクトには、1つの特定のフィーチャーフラグまたは複数のフィーチャーフラグの操作を含めることができます。 複数のフィーチャーフラグはグループとしても表現できます。これはネストされたフィーチャーオブジェクトです。
プレフィックス
フィーチャーオブジェクトには常にプレフィックスがあります。 デフォルトでは、フィーチャーオブジェクトのクラス名に基づいて構築されます。 例えば、User::OnboardingFeatureのデフォルトプレフィックスはuser_onboardingになります。
プレフィックスはprefixメソッドで変更できます:
ruby
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
# ...
endリソース
フィーチャーオブジェクトは、入力としてリソースの受け渡しを期待できます。 これらのリソースは、フィーチャーフラグの操作の補助としてアクション内で使用できます。
オプション
オプションoption
フィーチャーオブジェクトの呼び出し時にリソースを省略可能にします。 デフォルトはfalseです。
ruby
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User, option: true
# ...
endオプションnested
groupsを通じてネストされたフィーチャーオブジェクトにリソースを渡します。 デフォルトはfalseです。
ruby
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User, nested: true
# ...
end条件
フィーチャーオブジェクトには、動作の基本条件を含めることができます。 例えば、特定の状態のリソースに対してのみ操作を許可したい場合に便利です。
ruby
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User
condition ->(resources:) { resources.user.onboarding_awaiting? }
# ...
endフィーチャーのセット
1つのフィーチャーオブジェクト内で、1つまたは複数のフィーチャーフラグを指定できます。
ruby
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User
condition ->(resources:) { resources.user.onboarding_awaiting? }
features :passage
endruby
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User
condition ->(resources:) { resources.user.onboarding_awaiting? }
features :passage, :integration
end上記のonboardingプレフィックスの例と合わせると、以下のフィーチャーフラグが収集されます:
ruby
# => onboarding_passageruby
# => onboarding_passage
# => onboarding_integrationフィーチャーセットのグループ
ruby
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User
condition ->(resources:) { resources.user.onboarding_awaiting? }
features :passage
groups BillingFeature,
PaymentSystemFeature
end