mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-11 18:26:50 +00:00
Simplify negated feature toggle constraint
This commit is contained in:
@@ -3,11 +3,16 @@
|
||||
require "open_food_network/feature_toggle"
|
||||
|
||||
class FeatureToggleConstraint
|
||||
def initialize(feature_name)
|
||||
def initialize(feature_name, negate: false)
|
||||
@feature = feature_name
|
||||
@negate = negate
|
||||
end
|
||||
|
||||
def matches?(request)
|
||||
enabled?(request) ^ @negate
|
||||
end
|
||||
|
||||
def enabled?(request)
|
||||
OpenFoodNetwork::FeatureToggle.enabled?(@feature, current_user(request))
|
||||
end
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ Openfoodnetwork::Application.routes.draw do
|
||||
end
|
||||
|
||||
# When the split_checkout feature is disabled for the current user, use the legacy checkout
|
||||
constraints ->(request) { OpenFoodNetwork::FeatureToggle.disabled? :split_checkout, request.env['warden']&.user } do
|
||||
constraints FeatureToggleConstraint.new(:split_checkout, negate: true) do
|
||||
get '/checkout', to: 'checkout#edit'
|
||||
put '/checkout', to: 'checkout#update', as: :update_checkout
|
||||
get '/checkout/:state', to: 'checkout#edit', as: :checkout_state
|
||||
|
||||
28
spec/constraints/feature_toggle_constraint_spec.rb
Normal file
28
spec/constraints/feature_toggle_constraint_spec.rb
Normal file
@@ -0,0 +1,28 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe FeatureToggleConstraint do
|
||||
subject { described_class.new("baking") }
|
||||
let(:request) { double(env: env) }
|
||||
let(:env) { {} }
|
||||
|
||||
it "constraints an unknown feature" do
|
||||
expect(subject.matches?(request)).to eq false
|
||||
end
|
||||
|
||||
it "allows an activated feature" do
|
||||
Flipper.enable("baking")
|
||||
|
||||
expect(subject.matches?(request)).to eq true
|
||||
end
|
||||
|
||||
it "negates results" do
|
||||
subject = described_class.new("baking", negate: true)
|
||||
|
||||
expect(subject.matches?(request)).to eq true
|
||||
|
||||
Flipper.enable("baking")
|
||||
expect(subject.matches?(request)).to eq false
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user