diff --git a/lib/open_food_network/feature_toggle.rb b/lib/open_food_network/feature_toggle.rb index f57e740bc4..b3c5b5a2ae 100644 --- a/lib/open_food_network/feature_toggle.rb +++ b/lib/open_food_network/feature_toggle.rb @@ -40,29 +40,13 @@ module OpenFoodNetwork end def enabled?(feature_name, user) - if user.present? - feature = features.fetch(feature_name, NullFeature.new) - feature.enabled?(user) - else - true?(env_variable_value(feature_name)) - end + feature = features.fetch(feature_name, DefaultFeature.new(feature_name)) + feature.enabled?(user) end private attr_reader :features - - def env_variable_value(feature_name) - ENV.fetch(env_variable_name(feature_name), nil) - end - - def env_variable_name(feature_name) - "OFN_FEATURE_#{feature_name.to_s.upcase}" - end - - def true?(value) - value.to_s.casecmp("true").zero? - end end class Feature @@ -79,9 +63,29 @@ module OpenFoodNetwork attr_reader :block end - class NullFeature + class DefaultFeature + attr_reader :feature_name + + def initialize(feature_name) + @feature_name = feature_name + end + def enabled?(_user) - false + true?(env_variable_value(feature_name)) + end + + private + + def env_variable_value(feature_name) + ENV.fetch(env_variable_name(feature_name), nil) + end + + def env_variable_name(feature_name) + "OFN_FEATURE_#{feature_name.to_s.upcase}" + end + + def true?(value) + value.to_s.casecmp("true").zero? 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 d9904b0fd6..3e5e3cfa4f 100644 --- a/spec/lib/open_food_network/feature_toggle_spec.rb +++ b/spec/lib/open_food_network/feature_toggle_spec.rb @@ -46,11 +46,13 @@ module OpenFoodNetwork let(:users) { [user.email] } before do - FeatureToggle.enable(:foo) { |user| users.include?(user.email) } + FeatureToggle.enable(:foo) { |user| users.include?(user&.email) } end it "returns the block's return value" do expect(FeatureToggle.enabled?(:foo, user)).to eq(true) + expect(FeatureToggle.enabled?(:foo, OpenStruct.new(email: "different"))).to eq(false) + expect(FeatureToggle.enabled?(:foo, nil)).to eq(false) end end end