From a8eecf963dcd7aee50014884469da3d7b11428c4 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 18 Jun 2021 10:44:46 +1000 Subject: [PATCH] Remove unused custom FeatureToggle implementation Flipper is now our only source of truth regarding feature toggles. --- lib/open_food_network/feature_toggle.rb | 56 ++----------------- .../open_food_network/feature_toggle_spec.rb | 29 ---------- 2 files changed, 4 insertions(+), 81 deletions(-) diff --git a/lib/open_food_network/feature_toggle.rb b/lib/open_food_network/feature_toggle.rb index ee87886914..c93e12d069 100644 --- a/lib/open_food_network/feature_toggle.rb +++ b/lib/open_food_network/feature_toggle.rb @@ -1,63 +1,15 @@ module OpenFoodNetwork - # This feature toggles implementation provides two mechanisms to conditionally enable features. + # Feature toggles are configured via Flipper. # - # You can configure features via the Flipper config and web interface. See: + # 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 # - # Alternatively, you can choose which users have the feature toggled on. To do that you need to - # register the feature and its users from an initializer like: - # - # require 'open_food_network/feature_toggle' - # OpenFoodNetwork::FeatureToggle.enable(:new_shiny_feature, ['ofn@example.com']) - # - # Note, however, that it'd be better to read the user emails from an ENV var provisioned with - # ofn-install: - # - # require 'open_food_network/feature_toggle' - # OpenFoodNetwork::FeatureToggle.enable(:new_shiny_feature, ENV['PRODUCT_TEAM']) - # - # You can then check it from a view like: - # - # - if feature? :new_shiny_feature, spree_current_user - # = render "new_shiny_feature" - # module FeatureToggle def self.enabled?(feature_name, user = nil) - features = Thread.current[:features] || {} - - if Flipper[feature_name].exist? - Flipper.enabled?(feature_name, user) - else - feature = features.fetch(feature_name, DefaultFeature.new) - feature.enabled?(user) - end - end - - def self.enable(feature_name, &block) - Thread.current[:features] ||= {} - Thread.current[:features][feature_name] = Feature.new(block) - end - end - - class Feature - def initialize(block) - @block = block - end - - def enabled?(user) - block.call(user) - end - - private - - attr_reader :block - end - - class DefaultFeature - def enabled?(_user) - false + Flipper.enabled?(feature_name, 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 a91434a8a0..97e41108a6 100644 --- a/spec/lib/open_food_network/feature_toggle_spec.rb +++ b/spec/lib/open_food_network/feature_toggle_spec.rb @@ -14,34 +14,5 @@ module OpenFoodNetwork expect(FeatureToggle.enabled?(:foo)).to be true end end - - context 'when specifying users' do - let(:insider) { build(:user) } - let(:outsider) { build(:user, email: "different") } - - context 'and the block does not specify arguments' do - before do - FeatureToggle.enable(:foo) { 'return value' } - end - - it "returns the block's return value" do - expect(FeatureToggle.enabled?(:foo, insider)).to eq('return value') - end - end - - context 'and the block specifies arguments' do - let(:users) { [insider.email] } - - before do - FeatureToggle.enable(:foo) { |user| users.include?(user&.email) } - end - - it "returns the block's return value" do - expect(FeatureToggle.enabled?(:foo, insider)).to eq(true) - expect(FeatureToggle.enabled?(:foo, outsider)).to eq(false) - expect(FeatureToggle.enabled?(:foo, nil)).to eq(false) - end - end - end end end