Simplify negated feature toggle constraint

This commit is contained in:
Maikel Linke
2022-12-29 11:20:55 +11:00
committed by Filipe
parent b2db63178f
commit 1e77b96c2c
3 changed files with 35 additions and 2 deletions

View File

@@ -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

View File

@@ -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

View 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