diff --git a/config/initializers/flipper.rb b/config/initializers/flipper.rb
index dd2f97ba2c..69a013f25f 100644
--- a/config/initializers/flipper.rb
+++ b/config/initializers/flipper.rb
@@ -1,5 +1,6 @@
require "flipper"
require "flipper/adapters/active_record"
+require "open_food_network/feature_toggle"
if Rails.env.production?
Flipper::UI.configure do |config|
@@ -9,3 +10,17 @@ if Rails.env.production?
end
Flipper.register(:admins) { |actor| actor.respond_to?(:admin?) && actor.admin? }
+
+Flipper::UI.configure do |config|
+ config.descriptions_source = ->(_keys) do
+ # return has to be hash of {String key => String description}
+ OpenFoodNetwork::FeatureToggle::CURRENT_FEATURES
+ end
+
+ # Defaults to false. Set to true to show feature descriptions on the list
+ # page as well as the view page.
+ # config.show_feature_description_in_list = true
+end
+
+# Add known feature toggles. This may fail if the database isn't setup yet.
+OpenFoodNetwork::FeatureToggle.setup! rescue ActiveRecord::StatementInvalid
diff --git a/lib/open_food_network/feature_toggle.rb b/lib/open_food_network/feature_toggle.rb
index 888342fab3..981155e5d6 100644
--- a/lib/open_food_network/feature_toggle.rb
+++ b/lib/open_food_network/feature_toggle.rb
@@ -7,6 +7,58 @@ module OpenFoodNetwork
# - 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.
+ CURRENT_FEATURES = {
+ "admin_style_v2" => <<~DESC,
+ Change some colour and layout in the backend to a newer version.
+ DESC
+ "api_reports" => <<~DESC,
+ An API endpoint for reports at
+ /api/v0/reports/:report_type(/:report_subtype)
+ DESC
+ "api_v1" => <<~DESC,
+ Enable the new API at /api/v1
+ DESC
+ "background_reports" => <<~DESC,
+ Generate reports in a background process to limit memory consumption.
+ DESC
+ "dfc_provider" => <<~DESC,
+ Enable the DFC compatible endpoint at /api/dfc-*.
+ DESC
+ "match_shipping_categories" => <<~DESC,
+ During checkout, show only shipping methods that support all
+ shipping categories. Activating this feature for an enterprise owner
+ will activate it for all shops of this enterprise.
+ DESC
+ "new_products_page" => <<~DESC,
+ Show the new (experimental) version of the admin products page.
+ DESC
+ "split_checkout" => <<~DESC,
+ Replace the one-page checkout with a multi-step checkout.
+ DESC
+ }.freeze
+
+ # Move your feature entry from CURRENT_FEATURES to RETIRED_FEATURES when
+ # you remove it from the code. It will then be deleted from the database.
+ #
+ # We may delete this field one day and regard all features not listed in
+ # CURRENT_FEATURES as unsupported and remove them. But until this approach
+ # is accepted we delete only the features listed here.
+ RETIRED_FEATURES = {}.freeze
+
+ def self.setup!
+ CURRENT_FEATURES.each_key do |name|
+ feature = Flipper.feature(name)
+ feature.add unless feature.exist?
+ end
+
+ RETIRED_FEATURES.each_key do |name|
+ feature = Flipper.feature(name)
+ feature.remove if feature.exist?
+ end
+ end
+
def self.enabled?(feature_name, user = nil)
feature = Flipper.feature(feature_name)
feature.add unless feature.exist?