Фича объект Featury
Фича объект может содержать работу как с одним конкретным фича-флагом, так и с несколькими фича-флагами. Несколько фича-флагов также могут быть представлены в виде группы — вложенном объекте фичи.
Префикс
Объект фичи всегда имеет префикс. По умолчанию он собирается на основе имени класса объекта фичи. Например, для User::OnboardingFeature
по умолчанию префикс будет иметь значение user_onboarding
.
Изменить префикс можно при помощи метода prefix
:
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
# ...
end
Ресурсы
Объект фичи может ожидать на вход передачу ресурса. Эти ресурсы могут быть использованы в действиях в качестве дополнения для работы с фича-флагами.
Опции
Опция option
Делает ресурс необязательным для вызова объекта фичи. По умолчанию false
.
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User, option: true
# ...
end
Опция nested
Передает ресурс во вложенные объекты фичей через groups
. По умолчанию false
.
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User, nested: true
# ...
end
Условие
Объект фичи может содержать в себе базовое условие для работы. Например, это может быть полезно если нужно позволить работу с ресурсом только в определенном состоянии.
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User
condition ->(resources:) { resources.user.onboarding_awaiting? }
# ...
end
Набор фичей
В рамках одного объекта фичи можно указать один фича-флаг или несколько фича-флагов.
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User
condition ->(resources:) { resources.user.onboarding_awaiting? }
features :passage
end
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User
condition ->(resources:) { resources.user.onboarding_awaiting? }
features :passage, :integration
end
Вместе с префиксом onboarding
, пример которого представлен выше, будут собираться эти фича-флаги:
# => onboarding_passage
# => onboarding_passage
# => onboarding_integration
Группы наборов фичей
class User::OnboardingFeature < ApplicationFeature
prefix :onboarding
resource :user, type: User
condition ->(resources:) { resources.user.onboarding_awaiting? }
features :passage
groups BillingFeature,
PaymentSystemFeature
end