flipper-active_support_cache_store 0.21.0.rc1 → 0.22.1

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: 69675aef1db8485e9f3cb21398969b3031a3d3040b37356861c963d28acc4dff
4
- data.tar.gz: aefece2a0e08906eedec01aae748c3abcb7b1e6b5ff1dd8366a6c569068dd7d7
3
+ metadata.gz: 869bf3e6899bd729e79ff1d388e9d16d3e4794729cfadf8957661bd9333d41b6
4
+ data.tar.gz: bc352e5202e188faae59bb17dd34ac7723f5237d4d1d6965f76d1d9c582446e1
5
5
  SHA512:
6
- metadata.gz: 4a4d65cb32750bd93c37dce86702e7b11e3d945a4cfe1c385c452f5ee8306ff3be2f29163d704f94a19d3462518f4a00f7db77ed8a0cb84acb4130208595ee23
7
- data.tar.gz: fa9d79f5c02b4a053242fdbc7dec9c63630aa905c1beca9f3319d4520598fe46887438162104b008620ef92c8c8feb666948868966153ead918ad9b43b5f7a32
6
+ metadata.gz: 5d3b7f373dbbe26df81d34b6b1a8cf09649acd611ee39f94658c553d9f989aae4a2551ac754e20a3a5881a5ce03b4f6b53a21cb6cb74170709dcdf4426a33f6d
7
+ data.tar.gz: 4d72face3fe6025d5ca86a86656d7ef1ce409ad2158e5bcc8366c3533b4f54e54856d869d9e69b7c9059761b950ba0a11ebfe8df00376640d42679f7eb85db6d
@@ -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.21.0.rc1'.freeze
2
+ VERSION = '0.22.1'.freeze
3
3
  end
@@ -10,7 +10,8 @@ RSpec.describe Flipper::Adapters::ActiveSupportCacheStore do
10
10
  Flipper::Adapters::OperationLogger.new(Flipper::Adapters::Memory.new)
11
11
  end
12
12
  let(:cache) { ActiveSupport::Cache::MemoryStore.new }
13
- let(:adapter) { described_class.new(memory_adapter, cache, expires_in: 10.seconds) }
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.21.0.rc1
4
+ version: 0.22.1
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-05-01 00:00:00.000000000 Z
11
+ date: 2021-08-23 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.21.0.rc1
19
+ version: 0.22.1
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.21.0.rc1
26
+ version: 0.22.1
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'
@@ -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: 1.3.1
78
+ version: '0'
79
79
  requirements: []
80
80
  rubygems_version: 3.0.3
81
81
  signing_key: