Фича объект 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
endclass 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