Skip to content

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
end
ruby
class User::OnboardingFeature < ApplicationFeature
  prefix :onboarding

  resource :user, type: User

  condition ->(resources:) { resources.user.onboarding_awaiting? }

  features :passage, :integration
end

上記のonboardingプレフィックスの例と合わせると、以下のフィーチャーフラグが収集されます:

ruby
# => onboarding_passage
ruby
# => 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