From bc26a3aa070843c5cd7b6f0c76a280d87f45178f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 4 Oct 2022 13:51:34 +1100 Subject: [PATCH] Add used feature toggles to appear in the admin UI The admin UI shows only features which were added to the database. We always had to look up a feature's name add it manually before we could enable it. Now it will appear in the UI after some code asked if it was enabled. This only adds a database query once when the feature doesn't exist yet. The `feature.exist?` call only performs an in-memory lookup in the memoizer. --- lib/open_food_network/feature_toggle.rb | 7 +++---- spec/lib/open_food_network/feature_toggle_spec.rb | 7 +++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/open_food_network/feature_toggle.rb b/lib/open_food_network/feature_toggle.rb index 59f4b51c41..dd45753b16 100644 --- a/lib/open_food_network/feature_toggle.rb +++ b/lib/open_food_network/feature_toggle.rb @@ -3,15 +3,14 @@ module OpenFoodNetwork # Feature toggles are configured via Flipper. # - # We define features in the initializer and then it can be customised via the - # web interface on each server. - # # - config/initializers/flipper.rb # - http://localhost:3000/admin/feature-toggle/features # module FeatureToggle def self.enabled?(feature_name, user = nil) - Flipper.enabled?(feature_name, user) + feature = Flipper.feature(feature_name) + feature.add unless feature.exist? + feature.enabled?(user) end end end diff --git a/spec/lib/open_food_network/feature_toggle_spec.rb b/spec/lib/open_food_network/feature_toggle_spec.rb index 97e41108a6..ce18fb5bba 100644 --- a/spec/lib/open_food_network/feature_toggle_spec.rb +++ b/spec/lib/open_food_network/feature_toggle_spec.rb @@ -13,6 +13,13 @@ module OpenFoodNetwork Flipper.enable(:foo) expect(FeatureToggle.enabled?(:foo)).to be true end + + it "adds features to the database for easy admin in the UI" do + feature = Flipper.feature(:sparkling_new) + + expect { FeatureToggle.enabled?(:sparkling_new) }. + to change { feature.exist? }.from(false).to(true) + end end end end