Skip to content

Feature object Featury ​

A feature object can contain work with either one specific feature flag or several feature flags. Several feature flags can also be represented as a group — a nested feature object.

Prefix ​

A feature object always has a prefix. By default, it is built based on the class name of the feature object. For example, for User::OnboardingFeature the default prefix will be user_onboarding.

You can change the prefix using the prefix method:

ruby
class User::OnboardingFeature < ApplicationFeature
  prefix :onboarding
  
  # ...
end

Resources ​

A feature object may expect a resource to be passed to it as input. These resources can be used in actions as an addition to working with feature flags.

Options ​

Option option ​

Makes the resource optional for calling the feature object. Defaults to false.

ruby
class User::OnboardingFeature < ApplicationFeature
  prefix :onboarding

  resource :user, type: User, option: true

  # ...
end

Option nested ​

Passes a resource to nested feature objects via groups. Defaults to false.

ruby
class User::OnboardingFeature < ApplicationFeature
  prefix :onboarding

  resource :user, type: User, nested: true

  # ...
end

Condition ​

A feature object can contain a basic condition for operation. For example, this can be useful if you want to allow work with a resource only in a certain state.

ruby
class User::OnboardingFeature < ApplicationFeature
  prefix :onboarding

  resource :user, type: User

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

  # ...
end

Set of features ​

Within a single feature object, you can specify one feature flag or several feature flags.

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

Together with the onboarding prefix, an example of which is presented above, these feature flags will be collected:

ruby
# => onboarding_passage
ruby
# => onboarding_passage
# => onboarding_integration

Groups of feature sets ​

ruby
class User::OnboardingFeature < ApplicationFeature
  prefix :onboarding

  resource :user, type: User

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

  features :passage

  groups BillingFeature, 
         PaymentSystemFeature
end