Skip to content
Snippets Groups Projects
Unverified Commit e1ffd6a2 authored by Rémy Coutable's avatar Rémy Coutable
Browse files

Use RequestStore to memoize Flipper features so that memoized values are cleared between requests


Signed-off-by: default avatarRémy Coutable <remy@rymai.me>
parent c5f89e5b
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -63,8 +63,15 @@ class Feature
end
 
def flipper
Thread.current[:flipper] ||=
Flipper.new(flipper_adapter).tap { |flip| flip.memoize = true }
if RequestStore.active?
RequestStore[:flipper] ||= build_flipper_instance
else
@flipper ||= build_flipper_instance
end
end
def build_flipper_instance
Flipper.new(flipper_adapter).tap { |flip| flip.memoize = true }
end
 
# This method is called from config/initializers/flipper.rb and can be used
Loading
Loading
Loading
Loading
@@ -64,4 +64,28 @@ describe Feature do
expect(described_class.all).to eq(features.to_a)
end
end
describe '.flipper' do
shared_examples 'a memoized Flipper instance' do
it 'memoizes the Flipper instance' do
expect(Flipper).to receive(:new).once.and_call_original
2.times do
described_class.flipper
end
end
end
context 'when request store is inactive' do
before do
described_class.instance_variable_set(:@flipper, nil)
end
it_behaves_like 'a memoized Flipper instance'
end
context 'when request store is inactive', :request_store do
it_behaves_like 'a memoized Flipper instance'
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment