flipper-active_support_cache_store 0.20.1 → 0.21.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 898fba386a809a359061310a0d6046e729daa02f13c356b68e07ed124f1f0256
4
- data.tar.gz: ec7cc80e481b913f38577de7dc741648bd2a84a7a710892f2f2212a04a869c73
3
+ metadata.gz: 4f12adc3f156610eebdaffc6a039d7dba84751fad860e234f6dd187c6335df6a
4
+ data.tar.gz: '09e8c057928a894574dc62104e08ab6ec58f1baea9bac8a96f69c2035cabce8e'
5
5
  SHA512:
6
- metadata.gz: 78d940a2cf896c02d6e124f08d6222d4f048379531953d2c39573acfc254864dceecd5a7d057cafeccc11779f915c8bc50ba57e8052f942267a8dc32038f74fe
7
- data.tar.gz: a17916ed17d93fcb7883ec7eeca1b91f84c4d09906689795d0290e94e2b32b3801e11278b3c2f9d3f9b42520936960f5761c16f682ce29b4aba2373365032ac8
6
+ metadata.gz: c9015ed24e352c961e522dfa5ec0595fdda7d09dadb52551fa611b33177a436324061524282e421c6fd1529222feb36f9d41300a7b07cb440c299ee23d076d45
7
+ data.tar.gz: b609e58938ef8ac86d4b53d0d1d97087fef87e982881745549be5e1f021a738fcaed78b3f7d1fecd82a78ec1acac5ba50ed4b046d9ad14434ffb24ca904ea3d0
@@ -22,11 +22,17 @@ Or install it yourself with:
22
22
  require 'active_support/cache'
23
23
  require 'flipper/adapters/active_support_cache_store'
24
24
 
25
- memory_adapter = Flipper::Adapters::Memory.new
26
- cache = ActiveSupport::Cache::MemoryStore.new
27
- adapter = Flipper::Adapters::ActiveSupportCacheStore.new(memory_adapter, cache, expires_in: 5.minutes)
28
- flipper = Flipper.new(adapter)
25
+ Flipper.configure do |config|
26
+ config.adapter do
27
+ Flipper::Adapters::ActiveSupportCacheStore.new(
28
+ Flipper::Adapters::Memory.new,
29
+ ActiveSupport::Cache::MemoryStore.new, # Or Rails.cache
30
+ expires_in: 5.minutes
31
+ )
32
+ end
33
+ end
29
34
  ```
35
+
30
36
  Setting `expires_in` is optional and will set an expiration time on Flipper cache keys. If specified, all flipper keys will use this `expires_in` over the `expires_in` passed to your ActiveSupport cache constructor.
31
37
 
32
38
  ## Internals
@@ -25,12 +25,13 @@ module Flipper
25
25
  attr_reader :name
26
26
 
27
27
  # Public
28
- def initialize(adapter, cache, expires_in: nil)
28
+ def initialize(adapter, cache, expires_in: nil, write_through: false)
29
29
  @adapter = adapter
30
30
  @name = :active_support_cache_store
31
31
  @cache = cache
32
32
  @write_options = {}
33
33
  @write_options[:expires_in] = expires_in if expires_in
34
+ @write_through = write_through
34
35
  end
35
36
 
36
37
  # Public
@@ -49,7 +50,13 @@ module Flipper
49
50
  def remove(feature)
50
51
  result = @adapter.remove(feature)
51
52
  @cache.delete(FeaturesKey)
52
- @cache.delete(key_for(feature.key))
53
+
54
+ if @write_through
55
+ @cache.write(key_for(feature.key), default_config, @write_options)
56
+ else
57
+ @cache.delete(key_for(feature.key))
58
+ end
59
+
53
60
  result
54
61
  end
55
62
 
@@ -88,14 +95,26 @@ module Flipper
88
95
  ## Public
89
96
  def enable(feature, gate, thing)
90
97
  result = @adapter.enable(feature, gate, thing)
91
- @cache.delete(key_for(feature.key))
98
+
99
+ if @write_through
100
+ @cache.write(key_for(feature.key), @adapter.get(feature), @write_options)
101
+ else
102
+ @cache.delete(key_for(feature.key))
103
+ end
104
+
92
105
  result
93
106
  end
94
107
 
95
108
  ## Public
96
109
  def disable(feature, gate, thing)
97
110
  result = @adapter.disable(feature, gate, thing)
98
- @cache.delete(key_for(feature.key))
111
+
112
+ if @write_through
113
+ @cache.write(key_for(feature.key), @adapter.get(feature), @write_options)
114
+ else
115
+ @cache.delete(key_for(feature.key))
116
+ end
117
+
99
118
  result
100
119
  end
101
120
 
@@ -1,3 +1,3 @@
1
1
  module Flipper
2
- VERSION = '0.20.1'.freeze
2
+ VERSION = '0.21.0.rc2'.freeze
3
3
  end
@@ -9,8 +9,9 @@ RSpec.describe Flipper::Adapters::ActiveSupportCacheStore do
9
9
  let(:memory_adapter) do
10
10
  Flipper::Adapters::OperationLogger.new(Flipper::Adapters::Memory.new)
11
11
  end
12
- let(:cache) { ActiveSupport::Cache::DalliStore.new(ENV['MEMCACHED_URL']) }
13
- let(:adapter) { described_class.new(memory_adapter, cache, expires_in: 10.seconds) }
12
+ let(:cache) { ActiveSupport::Cache::MemoryStore.new }
13
+ let(:write_through) { false }
14
+ let(:adapter) { described_class.new(memory_adapter, cache, expires_in: 10.seconds, write_through: write_through) }
14
15
  let(:flipper) { Flipper.new(adapter) }
15
16
 
16
17
  subject { adapter }
@@ -22,11 +23,75 @@ RSpec.describe Flipper::Adapters::ActiveSupportCacheStore do
22
23
  it_should_behave_like 'a flipper adapter'
23
24
 
24
25
  describe '#remove' do
25
- it 'expires feature' do
26
- feature = flipper[:stats]
26
+ let(:feature) { flipper[:stats] }
27
+
28
+ before do
27
29
  adapter.get(feature)
28
30
  adapter.remove(feature)
29
- expect(cache.read(described_class.key_for(feature))).to be(nil)
31
+ end
32
+
33
+ it 'expires feature and deletes the cache' do
34
+ expect(cache.read(described_class.key_for(feature))).to be_nil
35
+ expect(cache.exist?(described_class.key_for(feature))).to be(false)
36
+ expect(feature).not_to be_enabled
37
+ end
38
+
39
+ context 'with write-through caching' do
40
+ let(:write_through) { true }
41
+
42
+ it 'expires feature and writes an empty value to the cache' do
43
+ expect(cache.read(described_class.key_for(feature))).to eq(adapter.default_config)
44
+ expect(cache.exist?(described_class.key_for(feature))).to be(true)
45
+ expect(feature).not_to be_enabled
46
+ end
47
+ end
48
+ end
49
+
50
+ describe '#enable' do
51
+ let(:feature) { flipper[:stats] }
52
+
53
+ before do
54
+ adapter.enable(feature, feature.gate(:boolean), flipper.boolean)
55
+ end
56
+
57
+ it 'enables feature and deletes the cache' do
58
+ expect(cache.read(described_class.key_for(feature))).to be_nil
59
+ expect(cache.exist?(described_class.key_for(feature))).to be(false)
60
+ expect(feature).to be_enabled
61
+ end
62
+
63
+ context 'with write-through caching' do
64
+ let(:write_through) { true }
65
+
66
+ it 'expires feature and writes to the cache' do
67
+ expect(cache.exist?(described_class.key_for(feature))).to be(true)
68
+ expect(cache.read(described_class.key_for(feature))).to include(boolean: 'true')
69
+ expect(feature).to be_enabled
70
+ end
71
+ end
72
+ end
73
+
74
+ describe '#disable' do
75
+ let(:feature) { flipper[:stats] }
76
+
77
+ before do
78
+ adapter.disable(feature, feature.gate(:boolean), flipper.boolean)
79
+ end
80
+
81
+ it 'disables feature and deletes the cache' do
82
+ expect(cache.read(described_class.key_for(feature))).to be_nil
83
+ expect(cache.exist?(described_class.key_for(feature))).to be(false)
84
+ expect(feature).not_to be_enabled
85
+ end
86
+
87
+ context 'with write-through caching' do
88
+ let(:write_through) { true }
89
+
90
+ it 'expires feature and writes to the cache' do
91
+ expect(cache.exist?(described_class.key_for(feature))).to be(true)
92
+ expect(cache.read(described_class.key_for(feature))).to include(boolean: nil)
93
+ expect(feature).not_to be_enabled
94
+ end
30
95
  end
31
96
  end
32
97
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flipper-active_support_cache_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.1
4
+ version: 0.21.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-31 00:00:00.000000000 Z
11
+ date: 2021-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: flipper
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.20.1
19
+ version: 0.21.0.rc2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.20.1
26
+ version: 0.21.0.rc2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -73,9 +73,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
73
73
  version: '0'
74
74
  required_rubygems_version: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - ">="
76
+ - - ">"
77
77
  - !ruby/object:Gem::Version
78
- version: '0'
78
+ version: 1.3.1
79
79
  requirements: []
80
80
  rubygems_version: 3.0.3
81
81
  signing_key: