Files
openfoodnetwork/lib/open_food_network/feature_toggle.rb
Maikel Linke 27353fbd7d Style FeatureToggle option for easier change
When the list of active features is empty, Rubocop wants the hash braces
to be collapsed to `{}`. While that's easier to read, we would need to
change that every time we add an entry or remove it. Instead I moved the
comment into the hash which satisfies Rubocop and is apt in that place.

This could also ease merge conflict resolution when we work on several
features in parallel.
2024-01-30 12:12:55 +11:00

84 lines
2.8 KiB
Ruby

# frozen_string_literal: true
module OpenFoodNetwork
# Feature toggles are configured via Flipper.
#
# - config/initializers/flipper.rb
# - http://localhost:3000/admin/feature-toggle/features
#
module FeatureToggle
# Please add your new feature here to appear in the Flipper UI.
# We way move this to a YAML file when it becomes too awkward.
# **WARNING:** Features not in this list will be removed.
#
# Once the feature is ready for general production use,
# copy the feature declaration to ACTIVE_BY_DEFAULT below and
# activate it for all instances with a migration:
#
# ./bin/rails generate migration EnableFeatureDragonMode
#
# Replace the `change` method with an `up` method and add this line:
#
# Flipper.enable("dragon_mode")
#
CURRENT_FEATURES = {
"admin_style_v3" => <<~DESC,
Test the work-in-progress design updates.
DESC
"api_reports" => <<~DESC,
An API endpoint for reports at
<code>/api/v0/reports/:report_type(/:report_subtype)</code>
DESC
"api_v1" => <<~DESC,
Enable the new API at <code>/api/v1</code>
DESC
"match_shipping_categories" => <<~DESC,
During checkout, show only shipping methods that support <em>all</em>
shipping categories. Activating this feature for an enterprise owner
will activate it for all shops of this enterprise.
DESC
"invoices" => <<~DESC,
Preserve the state of generated invoices and enable multiple invoice numbers instead of only one live-updating invoice.
DESC
"connected_apps" => <<~DESC,
Enterprise data can be shared with another app.
The first example is the Australian Discover Regenerative Portal.
DESC
}.freeze
# Features you would like to be enabled to start with.
ACTIVE_BY_DEFAULT = {
# Copy features here that were activated in a migration so that new
# instances, development and test environments have the feature active.
}.freeze
def self.setup!
CURRENT_FEATURES.each_key do |name|
feature = Flipper.feature(name)
unless feature.exist?
feature.add
feature.enable if ACTIVE_BY_DEFAULT[name]
end
end
Flipper.features.each do |feature|
feature.remove unless CURRENT_FEATURES.key?(feature.name)
end
end
# Checks weather a feature is enabled for any of the given actors.
def self.enabled?(feature_name, *actors)
return Flipper.enabled?(feature_name) if actors.empty?
actors.any? do |actor|
Flipper.enabled?(feature_name, actor)
end
end
# Checks weather a feature is disabled for all given actors.
def self.disabled?(feature_name, *actors)
!enabled?(feature_name, *actors)
end
end
end