Merge pull request #3970 from mkllnk/444-feature-toggle-use-env

Toggle features via env instead of initializer
This commit is contained in:
Pau Pérez Fabregat
2019-07-03 16:27:01 +02:00
committed by GitHub
2 changed files with 23 additions and 7 deletions

View File

@@ -1,13 +1,21 @@
module OpenFoodNetwork
class FeatureToggle
def self.enabled?(feature)
!!features.with_indifferent_access[feature]
def self.enabled?(feature_name)
true?(env_variable_value(feature_name))
end
private
def self.features
{ connect_learn_homepage: false }
def self.env_variable_value(feature_name)
ENV.fetch(env_variable_name(feature_name), nil)
end
def self.env_variable_name(feature_name)
"OFN_FEATURE_#{feature_name.to_s.upcase}"
end
def self.true?(value)
value.to_s.casecmp("true").zero?
end
end
end

View File

@@ -3,18 +3,26 @@ require 'open_food_network/feature_toggle'
module OpenFoodNetwork
describe FeatureToggle do
it "returns true when feature is on" do
allow(FeatureToggle).to receive(:features).and_return(foo: true)
stub_foo("true")
expect(FeatureToggle.enabled?(:foo)).to be true
end
it "returns false when feature is off" do
allow(FeatureToggle).to receive(:features).and_return(foo: false)
stub_foo("false")
expect(FeatureToggle.enabled?(:foo)).to be false
end
it "returns false when feature is unspecified" do
stub_foo("maybe")
expect(FeatureToggle.enabled?(:foo)).to be false
end
it "returns false when feature is undefined" do
allow(FeatureToggle).to receive(:features).and_return({})
expect(FeatureToggle.enabled?(:foo)).to be false
end
def stub_foo(value)
allow(ENV).to receive(:fetch).with("OFN_FEATURE_FOO", nil).and_return(value)
end
end
end