Skip to content

Commit 1403f51

Browse files
authored
Merge pull request #136 from ota42y/feature/redis_4
support redis-rb 4.0.0
2 parents 425801a + 152253f commit 1403f51

File tree

3 files changed

+53
-41
lines changed

3 files changed

+53
-41
lines changed

lib/redis/namespace.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ def initialize(namespace, options = {})
241241
@deprecations = !!options.fetch(:deprecations) do
242242
ENV['REDIS_NAMESPACE_DEPRECATIONS']
243243
end
244+
@has_new_client_method = @redis.respond_to?(:_client)
244245
end
245246

246247
def deprecations?
@@ -252,7 +253,13 @@ def warning?
252253
end
253254

254255
def client
255-
@redis.client
256+
warn("The client method is deprecated as of redis-rb 4.0.0, please use the new _client" +
257+
"method instead. Support for the old method will be removed in redis-namespace 2.0.") if @has_new_client_method
258+
_client
259+
end
260+
261+
def _client
262+
@has_new_client_method ? @redis._client : @redis.client # for redis-4.0.0
256263
end
257264

258265
# Ruby defines a now deprecated type method so we need to override it here

redis-namespace.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
1818
s.files += Dir.glob("test/**/*")
1919
s.files += Dir.glob("spec/**/*")
2020

21-
s.add_dependency "redis", "~> 3.0", ">= 3.0.4"
21+
s.add_dependency "redis", ">= 3.0.4"
2222

2323
s.add_development_dependency "rake", "~> 10.1"
2424
s.add_development_dependency "rspec", "~> 2.14"

spec/redis_spec.rb

Lines changed: 44 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
describe "redis" do
66
@redis_version = Gem::Version.new(Redis.current.info["redis_version"])
7+
let(:redis_client) { @redis.respond_to?(:_client) ? @redis._client : @redis.client}
78

89
before(:all) do
910
# use database 15 for testing so we dont accidentally step on your real data
@@ -13,7 +14,7 @@
1314
before(:each) do
1415
@namespaced = Redis::Namespace.new(:ns, :redis => @redis)
1516
@redis.flushdb
16-
@redis['foo'] = 'bar'
17+
@redis.set('foo', 'bar')
1718
end
1819

1920
after(:each) do
@@ -24,20 +25,24 @@
2425
@redis.quit
2526
end
2627

27-
it "proxies `client` to the client" do
28-
@namespaced.client.should eq(@redis.client)
28+
it "proxies `client` to the _client and deprecated" do
29+
@namespaced.client.should eq(redis_client)
30+
end
31+
32+
it "proxies `_client` to the _client" do
33+
@namespaced._client.should eq(redis_client)
2934
end
3035

3136
it "should be able to use a namespace" do
32-
@namespaced['foo'].should eq(nil)
33-
@namespaced['foo'] = 'chris'
34-
@namespaced['foo'].should eq('chris')
35-
@redis['foo'] = 'bob'
36-
@redis['foo'].should eq('bob')
37+
@namespaced.get('foo').should eq(nil)
38+
@namespaced.set('foo', 'chris')
39+
@namespaced.get('foo').should eq('chris')
40+
@redis.set('foo', 'bob')
41+
@redis.get('foo').should eq('bob')
3742

3843
@namespaced.incrby('counter', 2)
39-
@namespaced['counter'].to_i.should eq(2)
40-
@redis['counter'].should eq(nil)
44+
@namespaced.get('counter').to_i.should eq(2)
45+
@redis.get('counter').should eq(nil)
4146
@namespaced.type('counter').should eq('string')
4247
end
4348

@@ -60,21 +65,21 @@
6065
end
6166

6267
it "should be able to use a namespace with del" do
63-
@namespaced['foo'] = 1000
64-
@namespaced['bar'] = 2000
65-
@namespaced['baz'] = 3000
68+
@namespaced.set('foo', 1000)
69+
@namespaced.set('bar', 2000)
70+
@namespaced.set('baz', 3000)
6671
@namespaced.del 'foo'
67-
@namespaced['foo'].should eq(nil)
72+
@namespaced.get('foo').should eq(nil)
6873
@namespaced.del 'bar', 'baz'
69-
@namespaced['bar'].should eq(nil)
70-
@namespaced['baz'].should eq(nil)
74+
@namespaced.get('bar').should eq(nil)
75+
@namespaced.get('baz').should eq(nil)
7176
end
7277

7378
it 'should be able to use a namespace with append' do
74-
@namespaced['foo'] = 'bar'
79+
@namespaced.set('foo', 'bar')
7580
@namespaced.append('foo','n').should eq(4)
76-
@namespaced['foo'].should eq('barn')
77-
@redis['foo'].should eq('bar')
81+
@namespaced.get('foo').should eq('barn')
82+
@redis.get('foo').should eq('bar')
7883
end
7984

8085
it 'should be able to use a namespace with brpoplpush' do
@@ -124,15 +129,15 @@
124129

125130
it 'should be able to use a namespace with setrange' do
126131
@namespaced.setrange('foo', 0, 'bar')
127-
@namespaced['foo'].should eq('bar')
132+
@namespaced.get('foo').should eq('bar')
128133

129134
@namespaced.setrange('bar', 2, 'foo')
130-
@namespaced['bar'].should eq("\000\000foo")
135+
@namespaced.get('bar').should eq("\000\000foo")
131136
end
132137

133138
it "should be able to use a namespace with mget" do
134-
@namespaced['foo'] = 1000
135-
@namespaced['bar'] = 2000
139+
@namespaced.set('foo', 1000)
140+
@namespaced.set('bar', 2000)
136141
@namespaced.mapped_mget('foo', 'bar').should eq({ 'foo' => '1000', 'bar' => '2000' })
137142
@namespaced.mapped_mget('foo', 'baz', 'bar').should eq({'foo'=>'1000', 'bar'=>'2000', 'baz' => nil})
138143
end
@@ -276,9 +281,9 @@
276281
end
277282

278283
it "should yield the correct list of keys" do
279-
@namespaced["foo"] = 1
280-
@namespaced["bar"] = 2
281-
@namespaced["baz"] = 3
284+
@namespaced.set("foo", 1)
285+
@namespaced.set("bar", 2)
286+
@namespaced.set("baz", 3)
282287
@namespaced.keys("*").sort.should eq(%w( bar baz foo ))
283288
@namespaced.keys.sort.should eq(%w( bar baz foo ))
284289
end
@@ -322,8 +327,8 @@
322327
it "should returned response array from pipelined block" do
323328
@namespaced.mset "foo", "bar", "key", "value"
324329
result = @namespaced.pipelined do |r|
325-
r["foo"]
326-
r["key"]
330+
r.get("foo")
331+
r.get("key")
327332
end
328333
result.should eq(["bar", "value"])
329334
end
@@ -344,32 +349,32 @@
344349
end
345350

346351
it "can change its namespace" do
347-
@namespaced['foo'].should eq(nil)
348-
@namespaced['foo'] = 'chris'
349-
@namespaced['foo'].should eq('chris')
352+
@namespaced.get('foo').should eq(nil)
353+
@namespaced.set('foo', 'chris')
354+
@namespaced.get('foo').should eq('chris')
350355

351356
@namespaced.namespace.should eq(:ns)
352357
@namespaced.namespace = :spec
353358
@namespaced.namespace.should eq(:spec)
354359

355-
@namespaced['foo'].should eq(nil)
356-
@namespaced['foo'] = 'chris'
357-
@namespaced['foo'].should eq('chris')
360+
@namespaced.get('foo').should eq(nil)
361+
@namespaced.set('foo', 'chris')
362+
@namespaced.get('foo').should eq('chris')
358363
end
359364

360365
it "can accept a temporary namespace" do
361366
@namespaced.namespace.should eq(:ns)
362-
@namespaced['foo'].should eq(nil)
367+
@namespaced.get('foo').should eq(nil)
363368

364369
@namespaced.namespace(:spec) do |temp_ns|
365370
temp_ns.namespace.should eq(:spec)
366-
temp_ns['foo'].should eq(nil)
367-
temp_ns['foo'] = 'jake'
368-
temp_ns['foo'].should eq('jake')
371+
temp_ns.get('foo').should eq(nil)
372+
temp_ns.set('foo', 'jake')
373+
temp_ns.get('foo').should eq('jake')
369374
end
370375

371376
@namespaced.namespace.should eq(:ns)
372-
@namespaced['foo'].should eq(nil)
377+
@namespaced.get('foo').should eq(nil)
373378
end
374379

375380
it "should respond to :namespace=" do

0 commit comments

Comments
 (0)