flipper-active_support_cache_store 0.20.3 → 0.22.0

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: c9010787077601b0914434735ec0597635d3d5898d2458e6a2f140adb073336b
4
- data.tar.gz: 9f6e998101b175e26662c368f4a1155ef228fb596c85c138a76b5f8da6d45314
3
+ metadata.gz: 6b46bca885969a63c770a433abd9cd199d8b86a6d1827644a52885418ae5f0c6
4
+ data.tar.gz: 36638d200625fd6dd18aa5e0dbb87fddb53fe93efda554b7589c2834b2640e0c
5
5
  SHA512:
6
- metadata.gz: a259782237e0d1027ac7fbd10f057b14929addd027d575bafce82bd6ddda45c5dca1a610f151efa696f3b2a4e52266b1a3508b2a489aaee87c4d0a27c801d876
7
- data.tar.gz: 1bc8c0dc63e07cddfce36b0d807a11818c6c9eeb4b6c63fd2ae0ac68f881ca9f1d816d98ddf7d5bc44b5dc5d1aaadd13630776d1f7acd5043335186057c6b319
6
+ metadata.gz: 26d0b91e2e7e284f477e5c01013498966f8fe8bbc0a8c70205bc6590c0b8e9eeba74bedd918f0601217ff2f460f25f499afda3044998d3af65c340c265af0030
7
+ data.tar.gz: 1dd720b06aa8b06fcbaaa4b0e8da8c403d9821320dc50b3cee70f1be231a33539991b85b131fc72b06685096744d3431b63c9369269c5951323790467b055a0f
@@ -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
@@ -21,5 +21,5 @@ Gem::Specification.new do |gem|
21
21
  gem.metadata = Flipper::METADATA
22
22
 
23
23
  gem.add_dependency 'flipper', "~> #{Flipper::VERSION}"
24
- gem.add_dependency 'activesupport', '>= 5.0', '< 7'
24
+ gem.add_dependency 'activesupport', '>= 4.2', '< 7'
25
25
  end
@@ -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.3'.freeze
2
+ VERSION = '0.22.0'.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.3
4
+ version: 0.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-10 00:00:00.000000000 Z
11
+ date: 2021-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: flipper
@@ -16,21 +16,21 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.20.3
19
+ version: 0.22.0
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.3
26
+ version: 0.22.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '5.0'
33
+ version: '4.2'
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
36
  version: '7'
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: '5.0'
43
+ version: '4.2'
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '7'