redis-activesupport 5.0.7 → 5.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/auto-assign-issues.yml +2 -0
- data/.travis.yml +38 -21
- data/CODEOWNERS +1 -0
- data/README.md +8 -8
- data/lib/active_support/cache/redis_store.rb +93 -53
- data/lib/redis/active_support/version.rb +1 -1
- data/redis-activesupport.gemspec +5 -6
- data/test/active_support/cache/redis_store_test.rb +21 -3
- data/test/test_helper.rb +1 -1
- metadata +36 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1701d0f906647612a49e32325e5e3d4cef491fa6e4742b145482a7ad3f2b97b8
|
4
|
+
data.tar.gz: 4fcc1fa74965a7d624aa505874af54c2f49f379357deb5c0ce59efb1e4c7a91e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08fed28507f699223f4fd6ccc344a87d81f135e23837effc913353a8790f1db867dac62e54df107346b4eb01e441873b16675085714673c7fa1efcf9078a62e3'
|
7
|
+
data.tar.gz: 0527ae9cd279eb6b23a0519593a218ad46bc2e2b31cdef48f79571d1f1792b58f2cd92122d7e4b4c2417ab027240cccce47b23435c32f339dcd2d852c52d7738
|
data/.travis.yml
CHANGED
@@ -1,30 +1,47 @@
|
|
1
1
|
language: ruby
|
2
|
-
script:
|
2
|
+
script: bundle exec rake
|
3
3
|
rvm:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
- 2.0
|
5
|
+
- 2.1
|
6
|
+
- 2.3
|
7
|
+
- 2.4
|
8
|
+
- 2.5
|
9
|
+
- 2.6
|
10
|
+
- ruby-head
|
11
|
+
- jruby-head
|
11
12
|
services:
|
12
|
-
|
13
|
+
- redis-server
|
13
14
|
matrix:
|
14
15
|
allow_failures:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
- rvm: jruby-head
|
17
|
+
- rvm: ruby-head
|
18
|
+
exclude:
|
19
|
+
- rvm: 2.0
|
20
|
+
gemfile: gemfiles/activesupport_50.gemfile
|
21
|
+
- rvm: 2.1
|
22
|
+
gemfile: gemfiles/activesupport_50.gemfile
|
23
|
+
- rvm: 2.0
|
24
|
+
gemfile: gemfiles/activesupport_51.gemfile
|
25
|
+
- rvm: 2.1
|
26
|
+
gemfile: gemfiles/activesupport_51.gemfile
|
27
|
+
- rvm: 2.0
|
28
|
+
gemfile: gemfiles/activesupport_52.gemfile
|
29
|
+
- rvm: 2.1
|
30
|
+
gemfile: gemfiles/activesupport_52.gemfile
|
21
31
|
notifications:
|
22
32
|
webhooks: https://www.travisbuddy.com/
|
23
33
|
on_success: never
|
24
|
-
# Put this in your .travis.yml
|
25
34
|
gemfile:
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
35
|
+
- gemfiles/activesupport_3.gemfile
|
36
|
+
- gemfiles/activesupport_4.gemfile
|
37
|
+
- gemfiles/activesupport_50.gemfile
|
38
|
+
- gemfiles/activesupport_51.gemfile
|
39
|
+
- gemfiles/activesupport_52.gemfile
|
40
|
+
deploy:
|
41
|
+
provider: rubygems
|
42
|
+
api_key:
|
43
|
+
secure: VHWLUgCtqlKjeS5uGOxS4tnEUSPiapyvBvgSpr+FUeQnjAE9jgJvz+rAmiNy/pp8fAhjH5FdyIUXuh2rE2sWcBYrOa1rCvrc7eBHdnpZ4U7ULJwQKhC/4dOE33ClaZX2pex4pv12I2218ZH5TsqdmQ0Ci0ccfNZJv0vs+IFP+kQ=
|
44
|
+
gem: redis-activesupport
|
45
|
+
on:
|
46
|
+
tags: true
|
47
|
+
repo: redis-store/redis-activesupport
|
data/CODEOWNERS
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* @tubbo
|
data/README.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
# This gem is in LTS mode.
|
2
|
+
|
3
|
+
Rails 5.2.0 [includes a Redis cache store out of the
|
4
|
+
box](https://github.com/rails/rails/pull/31134), so you don't really
|
5
|
+
need this anymore if you're generating a new Rails application. We
|
6
|
+
are no longer accepting new features for this gem, only security
|
7
|
+
updates will be considered for new pull requests.
|
8
|
+
|
1
9
|
# Redis stores for ActiveSupport
|
2
10
|
|
3
11
|
__`redis-activesupport`__ provides a cache for __ActiveSupport__.
|
@@ -9,14 +17,6 @@ For information on how to use this library in a Rails app, see the [documentatio
|
|
9
17
|
|
10
18
|
If, for some reason, you're using `ActiveSupport::Cache` and not in a Rails app, read on to learn how to install/use this gem by itself!
|
11
19
|
|
12
|
-
## A quick note about Rails 5.2
|
13
|
-
|
14
|
-
Rails 5.2.0 [includes a Redis cache store out of the
|
15
|
-
box](https://github.com/rails/rails/pull/31134), so you don't really
|
16
|
-
need this anymore if you're generating a new Rails application. We
|
17
|
-
are no longer accepting new features for this gem, only pull requests
|
18
|
-
for security and compatibility fixes will be accepted.
|
19
|
-
|
20
20
|
## Installation
|
21
21
|
|
22
22
|
```ruby
|
@@ -13,6 +13,12 @@ module ActiveSupport
|
|
13
13
|
Redis::BaseConnectionError
|
14
14
|
].freeze
|
15
15
|
|
16
|
+
DEFAULT_ERROR_HANDLER = -> (method: nil, returning: nil, exception: nil) do
|
17
|
+
if logger
|
18
|
+
logger.error { "RedisStore: #{method} failed, returned #{returning.inspect}: #{exception.class}: #{exception.message}" }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
16
22
|
attr_reader :data
|
17
23
|
|
18
24
|
# Instantiate the store.
|
@@ -24,25 +30,25 @@ module ActiveSupport
|
|
24
30
|
# RedisStore.new client: Redis.new(url: "redis://127.0.0.1:6380/1")
|
25
31
|
# # => host: localhost, port: 6379, db: 0
|
26
32
|
#
|
27
|
-
# RedisStore.new "example.com"
|
33
|
+
# RedisStore.new "redis://example.com"
|
28
34
|
# # => host: example.com, port: 6379, db: 0
|
29
35
|
#
|
30
|
-
# RedisStore.new "example.com:23682"
|
36
|
+
# RedisStore.new "redis://example.com:23682"
|
31
37
|
# # => host: example.com, port: 23682, db: 0
|
32
38
|
#
|
33
|
-
# RedisStore.new "example.com:23682/1"
|
39
|
+
# RedisStore.new "redis://example.com:23682/1"
|
34
40
|
# # => host: example.com, port: 23682, db: 1
|
35
41
|
#
|
36
|
-
# RedisStore.new "example.com:23682/1/theplaylist"
|
42
|
+
# RedisStore.new "redis://example.com:23682/1/theplaylist"
|
37
43
|
# # => host: example.com, port: 23682, db: 1, namespace: theplaylist
|
38
44
|
#
|
39
|
-
# RedisStore.new "localhost:6379/0", "localhost:6380/0"
|
45
|
+
# RedisStore.new "redis://localhost:6379/0", "redis://localhost:6380/0"
|
40
46
|
# # => instantiate a cluster
|
41
47
|
#
|
42
|
-
# RedisStore.new "localhost:6379/0", "localhost:6380/0", pool_size: 5, pool_timeout: 10
|
48
|
+
# RedisStore.new "redis://localhost:6379/0", "redis://localhost:6380/0", pool_size: 5, pool_timeout: 10
|
43
49
|
# # => use a ConnectionPool
|
44
50
|
#
|
45
|
-
# RedisStore.new "localhost:6379/0", "localhost:6380/0",
|
51
|
+
# RedisStore.new "redis://localhost:6379/0", "redis://localhost:6380/0",
|
46
52
|
# pool: ::ConnectionPool.new(size: 1, timeout: 1) { ::Redis::Store::Factory.create("localhost:6379/0") })
|
47
53
|
# # => supply an existing connection pool (e.g. for use with redis-sentinel or redis-failover)
|
48
54
|
def initialize(*addresses)
|
@@ -65,16 +71,18 @@ module ActiveSupport
|
|
65
71
|
::Redis::Store::Factory.create(*addresses, @options)
|
66
72
|
end
|
67
73
|
|
74
|
+
@error_handler = @options[:error_handler] || DEFAULT_ERROR_HANDLER
|
75
|
+
|
68
76
|
super(@options)
|
69
77
|
end
|
70
78
|
|
71
79
|
def write(name, value, options = nil)
|
72
|
-
options = merged_options(options)
|
73
|
-
instrument(:write, name, options) do |
|
74
|
-
entry = options[:raw].present? ? value : Entry.new(value, options)
|
80
|
+
options = merged_options(options.to_h.symbolize_keys)
|
81
|
+
instrument(:write, name, options) do |_payload|
|
75
82
|
if options[:expires_in].present? && options[:race_condition_ttl].present? && options[:raw].blank?
|
76
83
|
options[:expires_in] = options[:expires_in].to_f + options[:race_condition_ttl].to_f
|
77
84
|
end
|
85
|
+
entry = options[:raw].present? ? value : Entry.new(value, **options)
|
78
86
|
write_entry(normalize_key(name, options), entry, options)
|
79
87
|
end
|
80
88
|
end
|
@@ -91,14 +99,13 @@ module ActiveSupport
|
|
91
99
|
def delete_matched(matcher, options = nil)
|
92
100
|
options = merged_options(options)
|
93
101
|
instrument(:delete_matched, matcher.inspect) do
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
102
|
+
failsafe(:read_multi, returning: false) do
|
103
|
+
matcher = key_matcher(matcher, options)
|
104
|
+
begin
|
105
|
+
with do |store|
|
106
|
+
!(keys = store.keys(matcher)).empty? && store.del(*keys)
|
107
|
+
end
|
98
108
|
end
|
99
|
-
rescue *ERRORS_TO_RESCUE
|
100
|
-
raise if raise_errors?
|
101
|
-
false
|
102
109
|
end
|
103
110
|
end
|
104
111
|
end
|
@@ -118,16 +125,15 @@ module ActiveSupport
|
|
118
125
|
args.flatten!
|
119
126
|
|
120
127
|
instrument(:read_multi, names) do |payload|
|
121
|
-
|
122
|
-
|
128
|
+
failsafe(:read_multi, returning: {}) do
|
129
|
+
values = with { |c| c.mget(*args) }
|
130
|
+
values.map! { |v| v.is_a?(ActiveSupport::Cache::Entry) ? v.value : v }
|
123
131
|
|
124
|
-
|
125
|
-
|
132
|
+
Hash[names.zip(values)].reject{|k,v| v.nil?}.tap do |result|
|
133
|
+
payload[:hits] = result.keys if payload
|
134
|
+
end
|
126
135
|
end
|
127
136
|
end
|
128
|
-
rescue *ERRORS_TO_RESCUE
|
129
|
-
raise if raise_errors?
|
130
|
-
{}
|
131
137
|
end
|
132
138
|
|
133
139
|
def fetch_multi(*names)
|
@@ -147,7 +153,7 @@ module ActiveSupport
|
|
147
153
|
memo
|
148
154
|
end
|
149
155
|
|
150
|
-
|
156
|
+
failsafe(:fetch_multi_write) do
|
151
157
|
with do |c|
|
152
158
|
c.multi do
|
153
159
|
need_writes.each do |name, value|
|
@@ -155,8 +161,6 @@ module ActiveSupport
|
|
155
161
|
end
|
156
162
|
end
|
157
163
|
end
|
158
|
-
rescue *ERRORS_TO_RESCUE
|
159
|
-
raise if raise_errors?
|
160
164
|
end
|
161
165
|
|
162
166
|
fetched
|
@@ -183,10 +187,18 @@ module ActiveSupport
|
|
183
187
|
#
|
184
188
|
# cache.increment "rabbit"
|
185
189
|
# cache.read "rabbit", :raw => true # => "1"
|
186
|
-
def increment(
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
+
def increment(name, amount = 1, options = {})
|
191
|
+
instrument :increment, name, amount: amount do
|
192
|
+
failsafe :increment do
|
193
|
+
options = merged_options(options)
|
194
|
+
key = normalize_key(name, options)
|
195
|
+
|
196
|
+
with do |c|
|
197
|
+
c.incrby(key, amount).tap do
|
198
|
+
write_key_expiry(c, key, options)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
190
202
|
end
|
191
203
|
end
|
192
204
|
|
@@ -211,10 +223,18 @@ module ActiveSupport
|
|
211
223
|
#
|
212
224
|
# cache.decrement "rabbit"
|
213
225
|
# cache.read "rabbit", :raw => true # => "-1"
|
214
|
-
def decrement(
|
215
|
-
|
216
|
-
|
217
|
-
|
226
|
+
def decrement(name, amount = 1, options = {})
|
227
|
+
instrument :decrement, name, amount: amount do
|
228
|
+
failsafe :decrement do
|
229
|
+
options = merged_options(options)
|
230
|
+
key = normalize_key(name, options)
|
231
|
+
|
232
|
+
with do |c|
|
233
|
+
c.decrby(key, amount).tap do
|
234
|
+
write_key_expiry(c, key, options)
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
218
238
|
end
|
219
239
|
end
|
220
240
|
|
@@ -226,7 +246,9 @@ module ActiveSupport
|
|
226
246
|
# Clear all the data from the store.
|
227
247
|
def clear
|
228
248
|
instrument(:clear, nil, nil) do
|
229
|
-
|
249
|
+
failsafe(:clear) do
|
250
|
+
with(&:flushdb)
|
251
|
+
end
|
230
252
|
end
|
231
253
|
end
|
232
254
|
|
@@ -255,20 +277,24 @@ module ActiveSupport
|
|
255
277
|
|
256
278
|
protected
|
257
279
|
def write_entry(key, entry, options)
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
false
|
280
|
+
failsafe(:write_entry, returning: false) do
|
281
|
+
method = options && options[:unless_exist] ? :setnx : :set
|
282
|
+
with { |client| client.send method, key, entry, options }
|
283
|
+
end
|
263
284
|
end
|
264
285
|
|
265
286
|
def read_entry(key, options)
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
287
|
+
failsafe(:read_entry) do
|
288
|
+
entry = with { |c| c.get key, options }
|
289
|
+
return unless entry
|
290
|
+
entry.is_a?(Entry) ? entry : Entry.new(entry)
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
def write_key_expiry(client, key, options)
|
295
|
+
if options[:expires_in] && client.ttl(key) < 0
|
296
|
+
client.expire key, options[:expires_in].to_i
|
297
|
+
end
|
272
298
|
end
|
273
299
|
|
274
300
|
##
|
@@ -276,11 +302,10 @@ module ActiveSupport
|
|
276
302
|
#
|
277
303
|
# It's really needed and use
|
278
304
|
#
|
279
|
-
def delete_entry(key, options)
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
false
|
305
|
+
def delete_entry(key, **options)
|
306
|
+
failsafe(:delete_entry, returning: false) do
|
307
|
+
with { |c| c.del key }
|
308
|
+
end
|
284
309
|
end
|
285
310
|
|
286
311
|
def raise_errors?
|
@@ -305,12 +330,27 @@ module ActiveSupport
|
|
305
330
|
end
|
306
331
|
|
307
332
|
private
|
308
|
-
|
309
333
|
if ActiveSupport::VERSION::MAJOR < 5
|
310
334
|
def normalize_key(*args)
|
311
335
|
namespaced_key(*args)
|
312
336
|
end
|
313
337
|
end
|
338
|
+
|
339
|
+
def failsafe(method, returning: nil)
|
340
|
+
yield
|
341
|
+
rescue ::Redis::BaseConnectionError => e
|
342
|
+
raise if raise_errors?
|
343
|
+
handle_exception(exception: e, method: method, returning: returning)
|
344
|
+
returning
|
345
|
+
end
|
346
|
+
|
347
|
+
def handle_exception(exception: nil, method: nil, returning: nil)
|
348
|
+
if @error_handler
|
349
|
+
@error_handler.(method: method, exception: exception, returning: returning)
|
350
|
+
end
|
351
|
+
rescue => failsafe
|
352
|
+
warn("RedisStore ignored exception in handle_exception: #{failsafe.class}: #{failsafe.message}\n #{failsafe.backtrace.join("\n ")}")
|
353
|
+
end
|
314
354
|
end
|
315
355
|
end
|
316
356
|
end
|
data/redis-activesupport.gemspec
CHANGED
@@ -13,21 +13,20 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = %q{Redis store for ActiveSupport}
|
14
14
|
s.license = 'MIT'
|
15
15
|
|
16
|
-
s.rubyforge_project = 'redis-activesupport'
|
17
|
-
|
18
16
|
s.files = `git ls-files`.split("\n")
|
19
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
19
|
s.require_paths = ['lib']
|
22
20
|
|
23
21
|
s.add_runtime_dependency "redis-store", '>= 1.3', '< 2'
|
24
|
-
s.add_runtime_dependency 'activesupport', '>= 3', '<
|
22
|
+
s.add_runtime_dependency 'activesupport', '>= 3', '< 8'
|
25
23
|
|
26
|
-
s.add_development_dependency 'rake', '
|
27
|
-
s.add_development_dependency 'bundler'
|
24
|
+
s.add_development_dependency 'rake', '>= 12.3.3'
|
25
|
+
s.add_development_dependency 'bundler'
|
28
26
|
s.add_development_dependency 'mocha', '~> 0.14.0'
|
29
27
|
s.add_development_dependency 'minitest', '>= 4.2', '< 6'
|
30
|
-
s.add_development_dependency 'connection_pool', '
|
28
|
+
s.add_development_dependency 'connection_pool', '= 2.2.2'
|
31
29
|
s.add_development_dependency 'redis-store-testing'
|
32
30
|
s.add_development_dependency 'appraisal', '~> 2.0'
|
31
|
+
s.add_development_dependency 'pry-byebug', '~> 3'
|
33
32
|
end
|
@@ -335,6 +335,24 @@ describe ActiveSupport::Cache::RedisStore do
|
|
335
335
|
end
|
336
336
|
end
|
337
337
|
|
338
|
+
it "increments a key with expiration time" do
|
339
|
+
with_store_management do |store|
|
340
|
+
store.increment "counter", 1, :expires_in => 1.second
|
341
|
+
store.read("counter", :raw => true).to_i.must_equal(1)
|
342
|
+
sleep 2
|
343
|
+
store.read("counter", :raw => true).must_be_nil
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
it "decrements a key with expiration time" do
|
348
|
+
with_store_management do |store|
|
349
|
+
store.decrement "counter", 1, :expires_in => 1.second
|
350
|
+
store.read("counter", :raw => true).to_i.must_equal(-1)
|
351
|
+
sleep 2
|
352
|
+
store.read("counter", :raw => true).must_be_nil
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
338
356
|
it "clears the store" do
|
339
357
|
with_store_management do |store|
|
340
358
|
store.clear
|
@@ -377,7 +395,7 @@ describe ActiveSupport::Cache::RedisStore do
|
|
377
395
|
|
378
396
|
describe "race_condition_ttl on fetch" do
|
379
397
|
it "persist entry for longer than given ttl" do
|
380
|
-
options = { force: true, expires_in: 1.second, race_condition_ttl: 2.seconds }
|
398
|
+
options = { force: true, expires_in: 1.second, race_condition_ttl: 2.seconds, version: Time.now.to_i }
|
381
399
|
@store.fetch("rabbit", options) { @rabbit }
|
382
400
|
sleep 1.1
|
383
401
|
@store.delete("rabbit").must_equal(1)
|
@@ -385,12 +403,12 @@ describe ActiveSupport::Cache::RedisStore do
|
|
385
403
|
|
386
404
|
it "limits stampede time to read-write duration" do
|
387
405
|
first_rabbit = second_rabbit = nil
|
388
|
-
options = { force: true, expires_in: 1.second, race_condition_ttl: 2.seconds }
|
406
|
+
options = { force: true, expires_in: 1.second, race_condition_ttl: 2.seconds, version: Time.now.to_i }
|
389
407
|
@store.fetch("rabbit", options) { @rabbit }
|
390
408
|
sleep 1
|
391
409
|
|
392
410
|
th1 = Thread.new do
|
393
|
-
first_rabbit = @store.fetch("rabbit",
|
411
|
+
first_rabbit = @store.fetch("rabbit", options) do
|
394
412
|
sleep 1
|
395
413
|
@white_rabbit
|
396
414
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis-activesupport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0
|
4
|
+
version: 5.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
8
|
- Ryan Bigg
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis-store
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
version: '3'
|
41
41
|
- - "<"
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: '
|
43
|
+
version: '8'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
46
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -50,35 +50,35 @@ dependencies:
|
|
50
50
|
version: '3'
|
51
51
|
- - "<"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '8'
|
54
54
|
- !ruby/object:Gem::Dependency
|
55
55
|
name: rake
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- - "
|
58
|
+
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
60
|
+
version: 12.3.3
|
61
61
|
type: :development
|
62
62
|
prerelease: false
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- - "
|
65
|
+
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
67
|
+
version: 12.3.3
|
68
68
|
- !ruby/object:Gem::Dependency
|
69
69
|
name: bundler
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- - "
|
72
|
+
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
74
|
+
version: '0'
|
75
75
|
type: :development
|
76
76
|
prerelease: false
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '0'
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: mocha
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,16 +117,16 @@ dependencies:
|
|
117
117
|
name: connection_pool
|
118
118
|
requirement: !ruby/object:Gem::Requirement
|
119
119
|
requirements:
|
120
|
-
- -
|
120
|
+
- - '='
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: 2.2.
|
122
|
+
version: 2.2.2
|
123
123
|
type: :development
|
124
124
|
prerelease: false
|
125
125
|
version_requirements: !ruby/object:Gem::Requirement
|
126
126
|
requirements:
|
127
|
-
- -
|
127
|
+
- - '='
|
128
128
|
- !ruby/object:Gem::Version
|
129
|
-
version: 2.2.
|
129
|
+
version: 2.2.2
|
130
130
|
- !ruby/object:Gem::Dependency
|
131
131
|
name: redis-store-testing
|
132
132
|
requirement: !ruby/object:Gem::Requirement
|
@@ -155,6 +155,20 @@ dependencies:
|
|
155
155
|
- - "~>"
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '2.0'
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: pry-byebug
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - "~>"
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '3'
|
165
|
+
type: :development
|
166
|
+
prerelease: false
|
167
|
+
version_requirements: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - "~>"
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '3'
|
158
172
|
description: Redis store for ActiveSupport
|
159
173
|
email:
|
160
174
|
- me@lucaguidi.com
|
@@ -163,9 +177,11 @@ executables: []
|
|
163
177
|
extensions: []
|
164
178
|
extra_rdoc_files: []
|
165
179
|
files:
|
180
|
+
- ".github/auto-assign-issues.yml"
|
166
181
|
- ".gitignore"
|
167
182
|
- ".travis.yml"
|
168
183
|
- Appraisals
|
184
|
+
- CODEOWNERS
|
169
185
|
- Gemfile
|
170
186
|
- MIT-LICENSE
|
171
187
|
- README.md
|
@@ -185,7 +201,7 @@ homepage: http://redis-store.org/redis-activesupport
|
|
185
201
|
licenses:
|
186
202
|
- MIT
|
187
203
|
metadata: {}
|
188
|
-
post_install_message:
|
204
|
+
post_install_message:
|
189
205
|
rdoc_options: []
|
190
206
|
require_paths:
|
191
207
|
- lib
|
@@ -200,9 +216,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
216
|
- !ruby/object:Gem::Version
|
201
217
|
version: '0'
|
202
218
|
requirements: []
|
203
|
-
|
204
|
-
|
205
|
-
signing_key:
|
219
|
+
rubygems_version: 3.2.11
|
220
|
+
signing_key:
|
206
221
|
specification_version: 4
|
207
222
|
summary: Redis store for ActiveSupport
|
208
223
|
test_files:
|