rack-attack 5.0.1 → 5.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +190 -94
  3. data/Rakefile +11 -4
  4. data/bin/setup +8 -0
  5. data/lib/rack/attack.rb +83 -51
  6. data/lib/rack/attack/allow2ban.rb +2 -1
  7. data/lib/rack/attack/blocklist.rb +0 -1
  8. data/lib/rack/attack/cache.rb +24 -5
  9. data/lib/rack/attack/check.rb +6 -8
  10. data/lib/rack/attack/fail2ban.rb +2 -1
  11. data/lib/rack/attack/path_normalizer.rb +6 -11
  12. data/lib/rack/attack/safelist.rb +0 -1
  13. data/lib/rack/attack/store_proxy.rb +3 -12
  14. data/lib/rack/attack/store_proxy/dalli_proxy.rb +2 -3
  15. data/lib/rack/attack/store_proxy/mem_cache_proxy.rb +4 -5
  16. data/lib/rack/attack/store_proxy/mem_cache_store_proxy.rb +19 -0
  17. data/lib/rack/attack/store_proxy/redis_cache_store_proxy.rb +35 -0
  18. data/lib/rack/attack/store_proxy/redis_proxy.rb +54 -0
  19. data/lib/rack/attack/store_proxy/redis_store_proxy.rb +5 -24
  20. data/lib/rack/attack/throttle.rb +16 -12
  21. data/lib/rack/attack/track.rb +3 -3
  22. data/lib/rack/attack/version.rb +1 -1
  23. data/spec/acceptance/allow2ban_spec.rb +71 -0
  24. data/spec/acceptance/blocking_ip_spec.rb +38 -0
  25. data/spec/acceptance/blocking_spec.rb +41 -0
  26. data/spec/acceptance/blocking_subnet_spec.rb +44 -0
  27. data/spec/acceptance/cache_store_config_for_allow2ban_spec.rb +126 -0
  28. data/spec/acceptance/cache_store_config_for_fail2ban_spec.rb +121 -0
  29. data/spec/acceptance/cache_store_config_for_throttle_spec.rb +48 -0
  30. data/spec/acceptance/cache_store_config_with_rails_spec.rb +31 -0
  31. data/spec/acceptance/customizing_blocked_response_spec.rb +41 -0
  32. data/spec/acceptance/customizing_throttled_response_spec.rb +59 -0
  33. data/spec/acceptance/extending_request_object_spec.rb +34 -0
  34. data/spec/acceptance/fail2ban_spec.rb +76 -0
  35. data/spec/acceptance/safelisting_ip_spec.rb +48 -0
  36. data/spec/acceptance/safelisting_spec.rb +53 -0
  37. data/spec/acceptance/safelisting_subnet_spec.rb +48 -0
  38. data/spec/acceptance/stores/active_support_dalli_store_spec.rb +19 -0
  39. data/spec/acceptance/stores/active_support_mem_cache_store_pooled_spec.rb +22 -0
  40. data/spec/acceptance/stores/active_support_mem_cache_store_spec.rb +18 -0
  41. data/spec/acceptance/stores/active_support_memory_store_spec.rb +16 -0
  42. data/spec/acceptance/stores/active_support_redis_cache_store_pooled_spec.rb +18 -0
  43. data/spec/acceptance/stores/active_support_redis_cache_store_spec.rb +18 -0
  44. data/spec/acceptance/stores/active_support_redis_store_spec.rb +18 -0
  45. data/spec/acceptance/stores/connection_pool_dalli_client_spec.rb +22 -0
  46. data/spec/acceptance/stores/dalli_client_spec.rb +19 -0
  47. data/spec/acceptance/stores/redis_spec.rb +20 -0
  48. data/spec/acceptance/stores/redis_store_spec.rb +18 -0
  49. data/spec/acceptance/throttling_spec.rb +159 -0
  50. data/spec/acceptance/track_spec.rb +27 -0
  51. data/spec/acceptance/track_throttle_spec.rb +53 -0
  52. data/spec/allow2ban_spec.rb +9 -8
  53. data/spec/fail2ban_spec.rb +11 -9
  54. data/spec/integration/offline_spec.rb +21 -23
  55. data/spec/rack_attack_dalli_proxy_spec.rb +0 -2
  56. data/spec/rack_attack_request_spec.rb +1 -1
  57. data/spec/rack_attack_spec.rb +13 -14
  58. data/spec/rack_attack_throttle_spec.rb +28 -18
  59. data/spec/rack_attack_track_spec.rb +11 -8
  60. data/spec/spec_helper.rb +35 -14
  61. data/spec/support/cache_store_helper.rb +82 -0
  62. metadata +150 -65
  63. data/spec/integration/rack_attack_cache_spec.rb +0 -122
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-attack
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Suggs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-11 00:00:00.000000000 Z
11
+ date: 2018-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -16,154 +16,174 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: '0'
29
+ version: '1.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
27
33
  - !ruby/object:Gem::Dependency
28
- name: minitest
34
+ name: appraisal
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - ">="
37
+ - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '0'
39
+ version: '2.2'
34
40
  type: :development
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - ">="
44
+ - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: '0'
46
+ version: '2.2'
41
47
  - !ruby/object:Gem::Dependency
42
- name: rack-test
48
+ name: bundler
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ">="
51
+ - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '0'
53
+ version: '1.16'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - ">="
58
+ - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '0'
60
+ version: '1.16'
55
61
  - !ruby/object:Gem::Dependency
56
- name: rake
62
+ name: minitest
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - ">="
65
+ - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: '0'
67
+ version: '5.11'
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - ">="
72
+ - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: '0'
74
+ version: '5.11'
69
75
  - !ruby/object:Gem::Dependency
70
- name: appraisal
76
+ name: minitest-stub-const
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
- - - ">="
79
+ - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: '0'
81
+ version: '0.6'
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
- - - ">="
86
+ - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: '0'
88
+ version: '0.6'
83
89
  - !ruby/object:Gem::Dependency
84
- name: activesupport
90
+ name: rack-test
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
- - - ">="
93
+ - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: 3.0.0
95
+ version: '1.0'
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
- - - ">="
100
+ - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: 3.0.0
102
+ version: '1.0'
97
103
  - !ruby/object:Gem::Dependency
98
- name: actionpack
104
+ name: rake
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
- - - ">="
107
+ - - "~>"
102
108
  - !ruby/object:Gem::Version
103
- version: 3.0.0
109
+ version: '12.3'
104
110
  type: :development
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
- - - ">="
114
+ - - "~>"
109
115
  - !ruby/object:Gem::Version
110
- version: 3.0.0
116
+ version: '12.3'
111
117
  - !ruby/object:Gem::Dependency
112
- name: redis-activesupport
118
+ name: rubocop
113
119
  requirement: !ruby/object:Gem::Requirement
114
120
  requirements:
115
- - - ">="
121
+ - - '='
116
122
  - !ruby/object:Gem::Version
117
- version: '0'
123
+ version: 0.58.2
118
124
  type: :development
119
125
  prerelease: false
120
126
  version_requirements: !ruby/object:Gem::Requirement
121
127
  requirements:
122
- - - ">="
128
+ - - '='
123
129
  - !ruby/object:Gem::Version
124
- version: '0'
130
+ version: 0.58.2
125
131
  - !ruby/object:Gem::Dependency
126
- name: dalli
132
+ name: timecop
127
133
  requirement: !ruby/object:Gem::Requirement
128
134
  requirements:
129
- - - ">="
135
+ - - "~>"
130
136
  - !ruby/object:Gem::Version
131
- version: '0'
137
+ version: 0.9.1
132
138
  type: :development
133
139
  prerelease: false
134
140
  version_requirements: !ruby/object:Gem::Requirement
135
141
  requirements:
136
- - - ">="
142
+ - - "~>"
137
143
  - !ruby/object:Gem::Version
138
- version: '0'
144
+ version: 0.9.1
139
145
  - !ruby/object:Gem::Dependency
140
- name: connection_pool
146
+ name: byebug
141
147
  requirement: !ruby/object:Gem::Requirement
142
148
  requirements:
143
- - - ">="
149
+ - - "~>"
144
150
  - !ruby/object:Gem::Version
145
- version: '0'
151
+ version: '10.0'
146
152
  type: :development
147
153
  prerelease: false
148
154
  version_requirements: !ruby/object:Gem::Requirement
149
155
  requirements:
150
- - - ">="
156
+ - - "~>"
151
157
  - !ruby/object:Gem::Version
152
- version: '0'
158
+ version: '10.0'
153
159
  - !ruby/object:Gem::Dependency
154
- name: memcache-client
160
+ name: actionpack
155
161
  requirement: !ruby/object:Gem::Requirement
156
162
  requirements:
157
- - - ">="
163
+ - - "~>"
158
164
  - !ruby/object:Gem::Version
159
- version: '0'
165
+ version: '5.2'
160
166
  type: :development
161
167
  prerelease: false
162
168
  version_requirements: !ruby/object:Gem::Requirement
163
169
  requirements:
164
- - - ">="
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '5.2'
173
+ - !ruby/object:Gem::Dependency
174
+ name: activesupport
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '5.2'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
165
185
  - !ruby/object:Gem::Version
166
- version: '0'
186
+ version: '5.2'
167
187
  description: A rack middleware for throttling and blocking abusive requests
168
188
  email: aaron@ktheory.com
169
189
  executables: []
@@ -172,6 +192,7 @@ extra_rdoc_files: []
172
192
  files:
173
193
  - README.md
174
194
  - Rakefile
195
+ - bin/setup
175
196
  - lib/rack/attack.rb
176
197
  - lib/rack/attack/allow2ban.rb
177
198
  - lib/rack/attack/blocklist.rb
@@ -184,14 +205,45 @@ files:
184
205
  - lib/rack/attack/store_proxy.rb
185
206
  - lib/rack/attack/store_proxy/dalli_proxy.rb
186
207
  - lib/rack/attack/store_proxy/mem_cache_proxy.rb
208
+ - lib/rack/attack/store_proxy/mem_cache_store_proxy.rb
209
+ - lib/rack/attack/store_proxy/redis_cache_store_proxy.rb
210
+ - lib/rack/attack/store_proxy/redis_proxy.rb
187
211
  - lib/rack/attack/store_proxy/redis_store_proxy.rb
188
212
  - lib/rack/attack/throttle.rb
189
213
  - lib/rack/attack/track.rb
190
214
  - lib/rack/attack/version.rb
215
+ - spec/acceptance/allow2ban_spec.rb
216
+ - spec/acceptance/blocking_ip_spec.rb
217
+ - spec/acceptance/blocking_spec.rb
218
+ - spec/acceptance/blocking_subnet_spec.rb
219
+ - spec/acceptance/cache_store_config_for_allow2ban_spec.rb
220
+ - spec/acceptance/cache_store_config_for_fail2ban_spec.rb
221
+ - spec/acceptance/cache_store_config_for_throttle_spec.rb
222
+ - spec/acceptance/cache_store_config_with_rails_spec.rb
223
+ - spec/acceptance/customizing_blocked_response_spec.rb
224
+ - spec/acceptance/customizing_throttled_response_spec.rb
225
+ - spec/acceptance/extending_request_object_spec.rb
226
+ - spec/acceptance/fail2ban_spec.rb
227
+ - spec/acceptance/safelisting_ip_spec.rb
228
+ - spec/acceptance/safelisting_spec.rb
229
+ - spec/acceptance/safelisting_subnet_spec.rb
230
+ - spec/acceptance/stores/active_support_dalli_store_spec.rb
231
+ - spec/acceptance/stores/active_support_mem_cache_store_pooled_spec.rb
232
+ - spec/acceptance/stores/active_support_mem_cache_store_spec.rb
233
+ - spec/acceptance/stores/active_support_memory_store_spec.rb
234
+ - spec/acceptance/stores/active_support_redis_cache_store_pooled_spec.rb
235
+ - spec/acceptance/stores/active_support_redis_cache_store_spec.rb
236
+ - spec/acceptance/stores/active_support_redis_store_spec.rb
237
+ - spec/acceptance/stores/connection_pool_dalli_client_spec.rb
238
+ - spec/acceptance/stores/dalli_client_spec.rb
239
+ - spec/acceptance/stores/redis_spec.rb
240
+ - spec/acceptance/stores/redis_store_spec.rb
241
+ - spec/acceptance/throttling_spec.rb
242
+ - spec/acceptance/track_spec.rb
243
+ - spec/acceptance/track_throttle_spec.rb
191
244
  - spec/allow2ban_spec.rb
192
245
  - spec/fail2ban_spec.rb
193
246
  - spec/integration/offline_spec.rb
194
- - spec/integration/rack_attack_cache_spec.rb
195
247
  - spec/rack_attack_dalli_proxy_spec.rb
196
248
  - spec/rack_attack_path_normalizer_spec.rb
197
249
  - spec/rack_attack_request_spec.rb
@@ -199,10 +251,14 @@ files:
199
251
  - spec/rack_attack_throttle_spec.rb
200
252
  - spec/rack_attack_track_spec.rb
201
253
  - spec/spec_helper.rb
202
- homepage: http://github.com/kickstarter/rack-attack
254
+ - spec/support/cache_store_helper.rb
255
+ homepage: https://github.com/kickstarter/rack-attack
203
256
  licenses:
204
257
  - MIT
205
- metadata: {}
258
+ metadata:
259
+ bug_tracker_uri: https://github.com/kickstarter/rack-attack/issues
260
+ changelog_uri: https://github.com/kickstarter/rack-attack/blob/master/CHANGELOG.md
261
+ source_code_uri: https://github.com/kickstarter/rack-attack
206
262
  post_install_message:
207
263
  rdoc_options:
208
264
  - "--charset=UTF-8"
@@ -212,7 +268,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
212
268
  requirements:
213
269
  - - ">="
214
270
  - !ruby/object:Gem::Version
215
- version: 2.0.0
271
+ version: '2.2'
216
272
  required_rubygems_version: !ruby/object:Gem::Requirement
217
273
  requirements:
218
274
  - - ">="
@@ -220,19 +276,48 @@ required_rubygems_version: !ruby/object:Gem::Requirement
220
276
  version: '0'
221
277
  requirements: []
222
278
  rubyforge_project:
223
- rubygems_version: 2.5.1
279
+ rubygems_version: 2.7.6
224
280
  signing_key:
225
281
  specification_version: 4
226
282
  summary: Block & throttle abusive requests
227
283
  test_files:
228
- - spec/allow2ban_spec.rb
229
- - spec/fail2ban_spec.rb
230
284
  - spec/integration/offline_spec.rb
231
- - spec/integration/rack_attack_cache_spec.rb
232
- - spec/rack_attack_dalli_proxy_spec.rb
233
285
  - spec/rack_attack_path_normalizer_spec.rb
234
- - spec/rack_attack_request_spec.rb
286
+ - spec/acceptance/safelisting_subnet_spec.rb
287
+ - spec/acceptance/track_throttle_spec.rb
288
+ - spec/acceptance/cache_store_config_for_fail2ban_spec.rb
289
+ - spec/acceptance/cache_store_config_with_rails_spec.rb
290
+ - spec/acceptance/cache_store_config_for_allow2ban_spec.rb
291
+ - spec/acceptance/safelisting_ip_spec.rb
292
+ - spec/acceptance/track_spec.rb
293
+ - spec/acceptance/blocking_subnet_spec.rb
294
+ - spec/acceptance/blocking_ip_spec.rb
295
+ - spec/acceptance/allow2ban_spec.rb
296
+ - spec/acceptance/throttling_spec.rb
297
+ - spec/acceptance/blocking_spec.rb
298
+ - spec/acceptance/customizing_throttled_response_spec.rb
299
+ - spec/acceptance/extending_request_object_spec.rb
300
+ - spec/acceptance/safelisting_spec.rb
301
+ - spec/acceptance/cache_store_config_for_throttle_spec.rb
302
+ - spec/acceptance/fail2ban_spec.rb
303
+ - spec/acceptance/stores/active_support_mem_cache_store_pooled_spec.rb
304
+ - spec/acceptance/stores/active_support_redis_cache_store_spec.rb
305
+ - spec/acceptance/stores/active_support_memory_store_spec.rb
306
+ - spec/acceptance/stores/active_support_redis_store_spec.rb
307
+ - spec/acceptance/stores/active_support_mem_cache_store_spec.rb
308
+ - spec/acceptance/stores/active_support_redis_cache_store_pooled_spec.rb
309
+ - spec/acceptance/stores/connection_pool_dalli_client_spec.rb
310
+ - spec/acceptance/stores/active_support_dalli_store_spec.rb
311
+ - spec/acceptance/stores/redis_store_spec.rb
312
+ - spec/acceptance/stores/dalli_client_spec.rb
313
+ - spec/acceptance/stores/redis_spec.rb
314
+ - spec/acceptance/customizing_blocked_response_spec.rb
315
+ - spec/spec_helper.rb
316
+ - spec/allow2ban_spec.rb
317
+ - spec/rack_attack_dalli_proxy_spec.rb
235
318
  - spec/rack_attack_spec.rb
236
319
  - spec/rack_attack_throttle_spec.rb
320
+ - spec/rack_attack_request_spec.rb
321
+ - spec/fail2ban_spec.rb
237
322
  - spec/rack_attack_track_spec.rb
238
- - spec/spec_helper.rb
323
+ - spec/support/cache_store_helper.rb
@@ -1,122 +0,0 @@
1
- require_relative '../spec_helper'
2
-
3
- describe Rack::Attack::Cache do
4
-
5
- # A convenience method for deleting a key from cache.
6
- # Slightly differnet than @cache.delete, which adds a prefix.
7
- def delete(key)
8
- if @cache.store.respond_to?(:delete)
9
- @cache.store.delete(key)
10
- else
11
- @cache.store.del(key)
12
- end
13
- end
14
-
15
- def sleep_until_expired
16
- sleep(@expires_in * 1.1) # Add 10% to reduce errors
17
- end
18
-
19
- require 'active_support/cache/dalli_store'
20
- require 'active_support/cache/mem_cache_store'
21
- require 'active_support/cache/redis_store'
22
- require 'connection_pool'
23
- cache_stores = [
24
- ActiveSupport::Cache::MemoryStore.new,
25
- ActiveSupport::Cache::DalliStore.new("127.0.0.1"),
26
- ActiveSupport::Cache::RedisStore.new("127.0.0.1"),
27
- ActiveSupport::Cache::MemCacheStore.new("127.0.0.1"),
28
- Dalli::Client.new,
29
- ConnectionPool.new { Dalli::Client.new },
30
- Redis::Store.new
31
- ]
32
-
33
- cache_stores.each do |store|
34
- store = Rack::Attack::StoreProxy.build(store)
35
- describe "with #{store.class}" do
36
-
37
- before {
38
- @cache = Rack::Attack::Cache.new
39
- @key = "rack::attack:cache-test-key"
40
- @expires_in = 1
41
- @cache.store = store
42
- delete(@key)
43
- }
44
-
45
- after { delete(@key) }
46
-
47
- describe "do_count once" do
48
- it "should be 1" do
49
- @cache.send(:do_count, @key, @expires_in).must_equal 1
50
- end
51
- end
52
-
53
- describe "do_count twice" do
54
- it "must be 2" do
55
- @cache.send(:do_count, @key, @expires_in)
56
- @cache.send(:do_count, @key, @expires_in).must_equal 2
57
- end
58
- end
59
-
60
- describe "do_count after expires_in" do
61
- it "must be 1" do
62
- @cache.send(:do_count, @key, @expires_in)
63
- sleep_until_expired
64
- @cache.send(:do_count, @key, @expires_in).must_equal 1
65
- end
66
- end
67
-
68
- describe "write" do
69
- it "should write a value to the store with prefix" do
70
- @cache.write("cache-test-key", "foobar", 1)
71
- store.read(@key).must_equal "foobar"
72
- end
73
- end
74
-
75
- describe "write after expiry" do
76
- it "must not have a value" do
77
- @cache.write("cache-test-key", "foobar", @expires_in)
78
- sleep_until_expired
79
- store.read(@key).must_be :nil?
80
- end
81
- end
82
-
83
- describe "read" do
84
- it "must read the value with a prefix" do
85
- store.write(@key, "foobar", :expires_in => @expires_in)
86
- @cache.read("cache-test-key").must_equal "foobar"
87
- end
88
- end
89
-
90
- describe "delete" do
91
- it "must delete the value" do
92
- store.write(@key, "foobar", :expires_in => @expires_in)
93
- @cache.read('cache-test-key').must_equal "foobar"
94
- store.delete(@key)
95
- @cache.read('cache-test-key').must_equal nil
96
- end
97
- end
98
-
99
- describe "cache#delete" do
100
- it "must delete the value" do
101
- @cache.write("cache-test-key", "foobar", 1)
102
- store.read(@key).must_equal "foobar"
103
- @cache.delete('cache-test-key')
104
- store.read(@key).must_be :nil?
105
- end
106
- end
107
-
108
- describe "reset_count" do
109
- it "must delete the value" do
110
- period = 1.minute
111
- unprefixed_key = 'cache-test-key'
112
- @cache.count(unprefixed_key, period)
113
- period_key, _ = @cache.send(:key_and_expiry, 'cache-test-key', period)
114
- store.read(period_key).to_i.must_equal 1
115
- @cache.reset_count(unprefixed_key, period)
116
- store.read(period_key).must_equal nil
117
- end
118
- end
119
- end
120
-
121
- end
122
- end