redis-store 1.5.0 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -90,52 +90,63 @@ describe "Redis::Store::Namespace" do
90
90
  end
91
91
 
92
92
  describe 'method calls' do
93
- let(:store){Redis::Store.new :namespace => @namespace, :serializer => nil}
94
- let(:client){store.instance_variable_get(:@client)}
93
+ let(:store) { Redis::Store.new :namespace => @namespace, :serializer => nil }
94
+ let(:client) { store.instance_variable_get(:@client) }
95
95
 
96
96
  it "should namespace get" do
97
- client.expects(:call).with([:get, "#{@namespace}:rabbit"]).once
98
- store.get("rabbit")
97
+ client.expects(:call).with([:get, "#{@namespace}:rabbit"]).once
98
+ store.get("rabbit")
99
99
  end
100
100
 
101
101
  it "should namespace set" do
102
- client.expects(:call).with([:set, "#{@namespace}:rabbit", @rabbit])
103
- store.set "rabbit", @rabbit
102
+ client.expects(:call).with([:set, "#{@namespace}:rabbit", @rabbit])
103
+ store.set "rabbit", @rabbit
104
104
  end
105
105
 
106
106
  it "should namespace setnx" do
107
- client.expects(:call).with([:setnx, "#{@namespace}:rabbit", @rabbit])
108
- store.setnx "rabbit", @rabbit
107
+ client.expects(:call).with([:setnx, "#{@namespace}:rabbit", @rabbit])
108
+ store.setnx "rabbit", @rabbit
109
109
  end
110
110
 
111
111
  it "should namespace del with single key" do
112
- client.expects(:call).with([:del, "#{@namespace}:rabbit"])
113
- store.del "rabbit"
112
+ client.expects(:call).with([:del, "#{@namespace}:rabbit"])
113
+ store.del "rabbit"
114
114
  end
115
115
 
116
116
  it "should namespace del with multiple keys" do
117
- client.expects(:call).with([:del, "#{@namespace}:rabbit", "#{@namespace}:white_rabbit"])
118
- store.del "rabbit", "white_rabbit"
117
+ client.expects(:call).with([:del, "#{@namespace}:rabbit", "#{@namespace}:white_rabbit"])
118
+ store.del "rabbit", "white_rabbit"
119
119
  end
120
120
 
121
121
  it "should namespace keys" do
122
- store.set "rabbit", @rabbit
123
- store.keys("rabb*").must_equal [ "rabbit" ]
122
+ store.set "rabbit", @rabbit
123
+ store.keys("rabb*").must_equal [ "rabbit" ]
124
+ end
125
+
126
+ it "should namespace scan when a pattern is given" do
127
+ store.set "rabbit", @rabbit
128
+ cursor = "0"
129
+ keys = []
130
+ begin
131
+ cursor, matched_keys = store.scan(cursor, match: "rabb*")
132
+ keys = keys.concat(matched_keys) unless matched_keys.empty?
133
+ end until cursor == "0"
134
+ keys.must_equal [ "rabbit" ]
124
135
  end
125
136
 
126
137
  it "should namespace exists" do
127
- client.expects(:call).with([:exists, "#{@namespace}:rabbit"])
128
- store.exists "rabbit"
138
+ client.expects(:call).with([:exists, "#{@namespace}:rabbit"])
139
+ store.exists "rabbit"
129
140
  end
130
141
 
131
142
  it "should namespace incrby" do
132
- client.expects(:call).with([:incrby, "#{@namespace}:counter", 1])
133
- store.incrby "counter", 1
143
+ client.expects(:call).with([:incrby, "#{@namespace}:counter", 1])
144
+ store.incrby "counter", 1
134
145
  end
135
146
 
136
147
  it "should namespace decrby" do
137
- client.expects(:call).with([:decrby, "#{@namespace}:counter", 1])
138
- store.decrby "counter", 1
148
+ client.expects(:call).with([:decrby, "#{@namespace}:counter", 1])
149
+ store.decrby "counter", 1
139
150
  end
140
151
 
141
152
  it "should namespace mget" do
@@ -154,24 +165,24 @@ describe "Redis::Store::Namespace" do
154
165
  end
155
166
 
156
167
  it "should namespace expire" do
157
- client.expects(:call).with([:expire, "#{@namespace}:rabbit", 60]).once
158
- store.expire("rabbit",60)
168
+ client.expects(:call).with([:expire, "#{@namespace}:rabbit", 60]).once
169
+ store.expire("rabbit", 60)
159
170
  end
160
171
 
161
172
  it "should namespace ttl" do
162
- client.expects(:call).with([:ttl, "#{@namespace}:rabbit"]).once
163
- store.ttl("rabbit")
173
+ client.expects(:call).with([:ttl, "#{@namespace}:rabbit"]).once
174
+ store.ttl("rabbit")
164
175
  end
165
176
 
166
177
  it "should namespace watch" do
167
- client.expects(:call).with([:watch,"#{@namespace}:rabbit"]).once
178
+ client.expects(:call).with([:watch, "#{@namespace}:rabbit"]).once
168
179
  store.watch("rabbit")
169
180
  end
170
181
 
171
182
  it "wraps flushdb with appropriate KEYS * calls" do
172
183
  client.expects(:call).with([:flushdb]).never
173
- client.expects(:call).with([:keys,"#{@namespace}:*"]).once.returns(["rabbit"])
174
- client.expects(:call).with([:del,"#{@namespace}:rabbit"]).once
184
+ client.expects(:call).with([:keys, "#{@namespace}:*"]).once.returns(["rabbit"])
185
+ client.expects(:call).with([:del, "#{@namespace}:rabbit"]).once
175
186
  store.flushdb
176
187
  end
177
188
 
@@ -182,5 +193,112 @@ describe "Redis::Store::Namespace" do
182
193
  store.flushdb
183
194
  end
184
195
  end
196
+
197
+ it "should namespace hdel" do
198
+ client.expects(:call).with([:hdel, "#{@namespace}:rabbit", "key1", "key2"]).once
199
+ store.hdel("rabbit", "key1", "key2")
200
+ end
201
+
202
+ it "should namespace hget" do
203
+ client.expects(:call).with([:hget, "#{@namespace}:rabbit", "key"]).once
204
+ store.hget("rabbit", "key")
205
+ end
206
+
207
+ it "should namespace hgetall" do
208
+ client.expects(:call).with([:hgetall, "#{@namespace}:rabbit"]).once
209
+ store.hgetall("rabbit")
210
+ end
211
+
212
+ it "should namespace hexists" do
213
+ client.expects(:call).with([:hexists, "#{@namespace}:rabbit", "key"]).once
214
+ results = store.hexists("rabbit", "key")
215
+ end
216
+
217
+ it "should namespace hincrby" do
218
+ client.expects(:call).with([:hincrby, "#{@namespace}:rabbit", "key", 1]).once
219
+ store.hincrby("rabbit", "key", 1)
220
+ end
221
+
222
+ it "should namespace hincrbyfloat" do
223
+ client.expects(:call).with([:hincrby, "#{@namespace}:rabbit", "key", 1.5]).once
224
+ store.hincrby("rabbit", "key", 1.5)
225
+ end
226
+
227
+ it "should namespace hkeys" do
228
+ client.expects(:call).with([:hkeys, "#{@namespace}:rabbit"])
229
+ store.hkeys("rabbit")
230
+ end
231
+
232
+ it "should namespace hlen" do
233
+ client.expects(:call).with([:hlen, "#{@namespace}:rabbit"])
234
+ store.hlen("rabbit")
235
+ end
236
+
237
+ it "should namespace hmget" do
238
+ client.expects(:call).with([:hmget, "#{@namespace}:rabbit", "key1", "key2"])
239
+ store.hmget("rabbit", "key1", "key2")
240
+ end
241
+
242
+ it "should namespace hmset" do
243
+ client.expects(:call).with([:hmset, "#{@namespace}:rabbit", "key", @rabbit])
244
+ store.hmset("rabbit", "key", @rabbit)
245
+ end
246
+
247
+ it "should namespace hset" do
248
+ client.expects(:call).with([:hset, "#{@namespace}:rabbit", "key", @rabbit])
249
+ store.hset("rabbit", "key", @rabbit)
250
+ end
251
+
252
+ it "should namespace hsetnx" do
253
+ client.expects(:call).with([:hsetnx, "#{@namespace}:rabbit", "key", @rabbit])
254
+ store.hsetnx("rabbit", "key", @rabbit)
255
+ end
256
+
257
+ it "should namespace hvals" do
258
+ client.expects(:call).with([:hvals, "#{@namespace}:rabbit"])
259
+ store.hvals("rabbit")
260
+ end
261
+
262
+ it "should namespace hscan" do
263
+ client.expects(:call).with([:hscan, "#{@namespace}:rabbit", 0])
264
+ store.hscan("rabbit", 0)
265
+ end
266
+
267
+ it "should namespace hscan_each with block" do
268
+ client.call([:hset, "#{@namespace}:rabbit", "key1", @rabbit])
269
+ client.expects(:call).with([:hscan, "#{@namespace}:rabbit", 0]).returns(["0", ["key1"]])
270
+ results = []
271
+ store.hscan_each("rabbit") do |key|
272
+ results << key
273
+ end
274
+ results.must_equal(["key1"])
275
+ end
276
+
277
+ it "should namespace hscan_each without block" do
278
+ client.call([:hset, "#{@namespace}:rabbit", "key1", @rabbit])
279
+ client.expects(:call).with([:hscan, "#{@namespace}:rabbit", 0]).returns(["0", ["key1"]])
280
+ results = store.hscan_each("rabbit").to_a
281
+ results.must_equal(["key1"])
282
+ end
283
+
284
+ it "should namespace zincrby" do
285
+ client.expects(:call).with([:zincrby, "#{@namespace}:rabbit", 1.0, "member"])
286
+ store.zincrby("rabbit", 1.0, "member")
287
+ end
288
+
289
+ it "should namespace zscore" do
290
+ client.expects(:call).with([:zscore, "#{@namespace}:rabbit", "member"])
291
+ store.zscore("rabbit", "member")
292
+ end
293
+
294
+ it "should namespace zadd" do
295
+ client.expects(:call).with([:zadd, "#{@namespace}:rabbit", 1.0, "member"])
296
+ store.zadd("rabbit", 1.0, "member")
297
+ end
298
+
299
+ it "should namespace zrem" do
300
+ client.expects(:call).with([:zrem, "#{@namespace}:rabbit", "member"])
301
+ store.zrem("rabbit", "member")
302
+ end
185
303
  end
186
304
  end
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
 
3
3
  describe "Redis::RedisVersion" do
4
4
  def setup
5
- @store = Redis::Store.new
5
+ @store = Redis::Store.new
6
6
  end
7
7
 
8
8
  def teardown
@@ -26,4 +26,3 @@ describe "Redis::RedisVersion" do
26
26
  end
27
27
  end
28
28
  end
29
-
@@ -81,8 +81,8 @@ describe "Redis::Serialization" do
81
81
 
82
82
  it "marshals setex (over a distributed store)" do
83
83
  @store = Redis::DistributedStore.new [
84
- {:host => "localhost", :port => "6380", :db => 0},
85
- {:host => "localhost", :port => "6381", :db => 0}
84
+ { :host => "localhost", :port => "6380", :db => 0 },
85
+ { :host => "localhost", :port => "6381", :db => 0 }
86
86
  ]
87
87
  @store.setex "rabbit", 50, @white_rabbit
88
88
  @store.get("rabbit").must_equal(@white_rabbit)
@@ -90,8 +90,8 @@ describe "Redis::Serialization" do
90
90
 
91
91
  it "doesn't marshal setex if raw option is true (over a distributed store)" do
92
92
  @store = Redis::DistributedStore.new [
93
- {:host => "localhost", :port => "6380", :db => 0},
94
- {:host => "localhost", :port => "6381", :db => 0}
93
+ { :host => "localhost", :port => "6380", :db => 0 },
94
+ { :host => "localhost", :port => "6381", :db => 0 }
95
95
  ]
96
96
  @store.setex "rabbit", 50, @white_rabbit, :raw => true
97
97
  @store.get("rabbit", :raw => true).must_equal(%(#<OpenStruct color="white">))
@@ -50,7 +50,6 @@ class MockRedis
50
50
  def has_expire?(*a)
51
51
  @expires.include?(a)
52
52
  end
53
-
54
53
  end
55
54
 
56
55
  class MockTtlStore < MockRedis
@@ -80,7 +79,7 @@ describe MockTtlStore do
80
79
 
81
80
  describe 'with nx and ex option' do
82
81
  it 'must call super with key and value and options' do
83
- set_options = {nx: true, ex: 3600}
82
+ set_options = { nx: true, ex: 3600 }
84
83
  redis.set(key, mock_value, set_options)
85
84
  redis.has_set?(key, mock_value, set_options).must_equal true
86
85
  end
@@ -134,6 +133,25 @@ describe MockTtlStore do
134
133
  redis.has_expire?(key, options[:expire_after]).must_equal true
135
134
  end
136
135
  end
136
+
137
+ describe 'using a redis cluster' do
138
+ let(:options) { { :expire_after => 3600, :cluster => %w[redis://127.0.0.1:6379/0] } }
139
+
140
+ it 'uses the redis pipelined feature to chain commands' do
141
+ redis.expects(:pipelined)
142
+ redis.setnx(key, mock_value, options)
143
+ end
144
+
145
+ it 'must call setnx with key and value and set raw to true' do
146
+ redis.setnx(key, mock_value, options)
147
+ redis.has_setnx?(key, mock_value, :raw => true).must_equal true
148
+ end
149
+
150
+ it 'must call expire' do
151
+ redis.setnx(key, mock_value, options)
152
+ redis.has_expire?(key, options[:expire_after]).must_equal true
153
+ end
154
+ end
137
155
  end
138
156
  end
139
157
  end
@@ -16,6 +16,6 @@ module Kernel
16
16
  $VERBOSE = nil
17
17
  result = yield
18
18
  $VERBOSE = original_verbosity
19
- return result
19
+ result
20
20
  end
21
21
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-store
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-16 00:00:00.000000000 Z
11
+ date: 2020-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.2'
19
+ version: '4'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '5'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '2.2'
29
+ version: '4'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '5'
@@ -34,30 +34,30 @@ dependencies:
34
34
  name: rake
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '10'
39
+ version: 12.3.3
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: '10'
46
+ version: 12.3.3
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '1.3'
53
+ version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - "~>"
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '1.3'
60
+ version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: mocha
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -156,6 +156,20 @@ dependencies:
156
156
  - - "~>"
157
157
  - !ruby/object:Gem::Version
158
158
  version: '2.0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rubocop
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.54'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '0.54'
159
173
  description: Namespaced Rack::Session, Rack::Cache, I18n and cache Redis stores for
160
174
  Ruby web frameworks.
161
175
  email:
@@ -164,15 +178,20 @@ executables: []
164
178
  extensions: []
165
179
  extra_rdoc_files: []
166
180
  files:
181
+ - ".codeclimate.yml"
182
+ - ".github/auto-assign-issues.yml"
167
183
  - ".gitignore"
184
+ - ".rubocop.yml"
168
185
  - ".travis.yml"
169
186
  - Appraisals
170
187
  - CHANGELOG.md
188
+ - CODEOWNERS
171
189
  - Gemfile
172
190
  - MIT-LICENSE
173
191
  - README.md
174
192
  - Rakefile
175
- - gemfiles/redis_3_x.gemfile
193
+ - gemfiles/redis_4_0_x.gemfile
194
+ - gemfiles/redis_4_1_x.gemfile
176
195
  - gemfiles/redis_4_x.gemfile
177
196
  - lib/redis-store.rb
178
197
  - lib/redis/distributed_store.rb
@@ -214,8 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
233
  - !ruby/object:Gem::Version
215
234
  version: '0'
216
235
  requirements: []
217
- rubyforge_project: redis-store
218
- rubygems_version: 2.7.3
236
+ rubygems_version: 3.1.2
219
237
  signing_key:
220
238
  specification_version: 4
221
239
  summary: Redis stores for Ruby frameworks