redis-store 1.0.0.beta2 → 1.0.0.beta3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of redis-store might be problematic. Click here for more details.
- data/CHANGELOG +74 -23
- data/Gemfile +12 -7
- data/Gemfile.lock +183 -0
- data/MIT-LICENSE +1 -1
- data/README.md +49 -14
- data/Rakefile +8 -4
- data/VERSION +1 -1
- data/lib/{rack/session/rails.rb → action_controller/session/redis_session_store.rb} +24 -20
- data/lib/{cache/rails → active_support/cache}/redis_store.rb +64 -22
- data/lib/cache/merb/redis_store.rb +20 -8
- data/lib/cache/sinatra/redis_store.rb +20 -8
- data/lib/i18n/backend/redis.rb +67 -0
- data/lib/rack/cache/redis_metastore.rb +4 -4
- data/lib/rack/session/redis.rb +7 -7
- data/lib/redis-store.rb +16 -14
- data/lib/redis/distributed_store.rb +35 -0
- data/lib/redis/factory.rb +29 -10
- data/lib/redis/store.rb +30 -0
- data/lib/redis/store/interface.rb +17 -0
- data/lib/redis/store/marshalling.rb +41 -0
- data/lib/redis/store/namespace.rb +54 -0
- data/lib/redis/store/ttl.rb +37 -0
- data/lib/redis/store/version.rb +12 -0
- data/redis-store.gemspec +32 -20
- data/spec/action_controller/session/redis_session_store_spec.rb +121 -0
- data/spec/{cache/rails → active_support/cache}/redis_store_spec.rb +93 -19
- data/spec/cache/merb/redis_store_spec.rb +14 -11
- data/spec/cache/sinatra/redis_store_spec.rb +14 -11
- data/spec/config/master.conf +1 -1
- data/spec/config/single.conf +1 -1
- data/spec/config/slave.conf +1 -1
- data/spec/i18n/backend/redis_spec.rb +56 -0
- data/spec/rack/cache/entitystore/redis_spec.rb +10 -8
- data/spec/rack/cache/metastore/redis_spec.rb +2 -2
- data/spec/rack/session/redis_spec.rb +6 -6
- data/spec/redis/distributed_store_spec.rb +47 -0
- data/spec/redis/factory_spec.rb +58 -16
- data/spec/redis/store/interface_spec.rb +23 -0
- data/spec/redis/store/marshalling_spec.rb +83 -0
- data/spec/redis/store/namespace_spec.rb +76 -0
- data/spec/redis/store/version_spec.rb +7 -0
- data/spec/spec_helper.rb +16 -5
- data/tasks/redis.tasks.rb +19 -12
- metadata +33 -21
- data/lib/redis/distributed_marshaled.rb +0 -28
- data/lib/redis/marshaled_client.rb +0 -65
- data/lib/redis_store/version.rb +0 -10
- data/spec/rack/session/redis_session_store_spec.rb +0 -75
- data/spec/redis/distributed_marshaled_redis_spec.rb +0 -33
- data/spec/redis/marshaled_client_spec.rb +0 -83
- data/spec/redis_store/version_spec.rb +0 -7
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
RAILS_SESSION_STORE_CLASS = ::Redis::Store.rails3? ? ActionDispatch::Session::RedisSessionStore : ActionController::Session::RedisSessionStore
|
3
|
+
|
4
|
+
describe RAILS_SESSION_STORE_CLASS do
|
5
|
+
attr_reader :app
|
6
|
+
|
7
|
+
before :each do
|
8
|
+
@app = Object.new
|
9
|
+
@store = RAILS_SESSION_STORE_CLASS.new(app)
|
10
|
+
@dstore = RAILS_SESSION_STORE_CLASS.new app, :servers => ["redis://127.0.0.1:6380/1", "redis://127.0.0.1:6381/1"]
|
11
|
+
@rabbit = OpenStruct.new :name => "bunny"
|
12
|
+
@white_rabbit = OpenStruct.new :color => "white"
|
13
|
+
@sid = "rabbit"
|
14
|
+
@env = {'rack.session.options' => {:id => @sid}}
|
15
|
+
with_store_management do |store|
|
16
|
+
class << store
|
17
|
+
attr_reader :pool
|
18
|
+
public :get_session, :set_session, :destroy
|
19
|
+
end
|
20
|
+
store.set_session(@env, @sid, @rabbit)
|
21
|
+
store.pool.del "counter"
|
22
|
+
store.pool.del "rub-a-dub"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should accept string connection params" do
|
27
|
+
redis = instantiate_store
|
28
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6379 against DB 0"
|
29
|
+
|
30
|
+
redis = instantiate_store :servers => "redis://localhost"
|
31
|
+
redis.to_s.should == "Redis Client connected to localhost:6379 against DB 0"
|
32
|
+
|
33
|
+
redis = instantiate_store :servers => "redis://localhost:6380"
|
34
|
+
redis.to_s.should == "Redis Client connected to localhost:6380 against DB 0"
|
35
|
+
|
36
|
+
redis = instantiate_store :servers => "redis://localhost:6380/13"
|
37
|
+
redis.to_s.should == "Redis Client connected to localhost:6380 against DB 13"
|
38
|
+
|
39
|
+
redis = instantiate_store :servers => "redis://localhost:6380/13/theplaylist"
|
40
|
+
redis.to_s.should == "Redis Client connected to localhost:6380 against DB 13 with namespace theplaylist"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should accept hash connection params" do
|
44
|
+
redis = instantiate_store :servers => [{ :host => "192.168.0.1" }]
|
45
|
+
redis.to_s.should == "Redis Client connected to 192.168.0.1:6379 against DB 0"
|
46
|
+
|
47
|
+
redis = instantiate_store :servers => [{ :port => "6380" }]
|
48
|
+
redis.to_s.should == "Redis Client connected to localhost:6380 against DB 0"
|
49
|
+
|
50
|
+
redis = instantiate_store :servers => [{ :db => 13 }]
|
51
|
+
redis.to_s.should == "Redis Client connected to localhost:6379 against DB 13"
|
52
|
+
|
53
|
+
redis = instantiate_store :servers => [{ :key_prefix => "theplaylist" }]
|
54
|
+
redis.to_s.should == "Redis Client connected to localhost:6379 against DB 0 with namespace theplaylist"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should instantiate a ring" do
|
58
|
+
store = instantiate_store
|
59
|
+
store.should be_kind_of(Redis::Store)
|
60
|
+
store = instantiate_store :servers => ["redis://127.0.0.1:6379/0", "redis://127.0.0.1:6379/1"]
|
61
|
+
store.should be_kind_of(Redis::DistributedStore)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should read the data" do
|
65
|
+
with_store_management do |store|
|
66
|
+
store.get_session(@env, @sid).should === [@sid, @rabbit]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should write the data" do
|
71
|
+
with_store_management do |store|
|
72
|
+
store.set_session(@env, @sid, @white_rabbit)
|
73
|
+
store.get_session(@env, @sid).should === [@sid, @white_rabbit]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should delete the data" do
|
78
|
+
with_store_management do |store|
|
79
|
+
store.destroy(@env)
|
80
|
+
store.get_session(@env, @sid).should === [@sid, {}]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should write the data with expiration time" do
|
85
|
+
with_store_management do |store|
|
86
|
+
@env['rack.session.options'].merge!(:expires_in => 1.second)
|
87
|
+
store.set_session(@env, @sid, @white_rabbit)
|
88
|
+
store.get_session(@env, @sid).should === [@sid, @white_rabbit]; sleep 2
|
89
|
+
store.get_session(@env, @sid).should === [@sid, {}]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "namespace" do
|
94
|
+
before :each do
|
95
|
+
@namespace = "theplaylist"
|
96
|
+
@store = RAILS_SESSION_STORE_CLASS.new(lambda {|| }, :servers => [{ :namespace => @namespace }])
|
97
|
+
@pool = @store.instance_variable_get(:@pool)
|
98
|
+
@client = @pool.instance_variable_get(:@client)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should read the data" do
|
102
|
+
@client.should_receive(:call).with(:get, "#{@namespace}:#{@sid}")
|
103
|
+
@store.send :get_session, @env, @sid
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should write the data" do
|
107
|
+
@client.should_receive(:call).with(:set, "#{@namespace}:#{@sid}", Marshal.dump(@white_rabbit))
|
108
|
+
@store.send :set_session, @env, @sid, @white_rabbit
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
private
|
113
|
+
def instantiate_store(params = { })
|
114
|
+
RAILS_SESSION_STORE_CLASS.new(app, params).instance_variable_get(:@pool)
|
115
|
+
end
|
116
|
+
|
117
|
+
def with_store_management
|
118
|
+
yield @store
|
119
|
+
yield @dstore
|
120
|
+
end
|
121
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module ActiveSupport
|
4
4
|
module Cache
|
5
5
|
describe RedisStore do
|
6
6
|
before :each do
|
7
7
|
@store = ActiveSupport::Cache::RedisStore.new
|
8
|
-
@dstore = ActiveSupport::Cache::RedisStore.new "
|
8
|
+
@dstore = ActiveSupport::Cache::RedisStore.new "redis://127.0.0.1:6380/1", "redis://127.0.0.1:6381/1"
|
9
9
|
@rabbit = OpenStruct.new :name => "bunny"
|
10
10
|
@white_rabbit = OpenStruct.new :color => "white"
|
11
11
|
with_store_management do |store|
|
@@ -19,21 +19,24 @@ module ActiveSupport
|
|
19
19
|
redis = instantiate_store
|
20
20
|
redis.to_s.should == "Redis Client connected to 127.0.0.1:6379 against DB 0"
|
21
21
|
|
22
|
-
redis = instantiate_store "
|
23
|
-
redis.to_s.should == "Redis Client connected to
|
22
|
+
redis = instantiate_store "redis://127.0.0.1"
|
23
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6379 against DB 0"
|
24
|
+
|
25
|
+
redis = instantiate_store "redis://127.0.0.1:6380"
|
26
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 0"
|
24
27
|
|
25
|
-
redis = instantiate_store "
|
26
|
-
redis.to_s.should == "Redis Client connected to
|
28
|
+
redis = instantiate_store "redis://127.0.0.1:6380/13"
|
29
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 13"
|
27
30
|
|
28
|
-
redis = instantiate_store "
|
29
|
-
redis.to_s.should == "Redis Client connected to
|
31
|
+
redis = instantiate_store "redis://127.0.0.1:6380/13/theplaylist"
|
32
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 13 with namespace theplaylist"
|
30
33
|
end
|
31
34
|
|
32
35
|
it "should instantiate a ring" do
|
33
36
|
store = instantiate_store
|
34
|
-
store.should be_kind_of(Redis::
|
35
|
-
store = instantiate_store ["
|
36
|
-
store.should be_kind_of(Redis::
|
37
|
+
store.should be_kind_of(Redis::Store)
|
38
|
+
store = instantiate_store ["redis://127.0.0.1:6379/0", "redis://127.0.0.1:6379/1"]
|
39
|
+
store.should be_kind_of(Redis::DistributedStore)
|
37
40
|
end
|
38
41
|
|
39
42
|
it "should read the data" do
|
@@ -64,13 +67,13 @@ module ActiveSupport
|
|
64
67
|
end
|
65
68
|
end
|
66
69
|
|
67
|
-
if ::
|
70
|
+
if ::Redis::Store.rails3?
|
68
71
|
if RUBY_VERSION.match /1\.9/
|
69
72
|
it "should read raw data" do
|
70
73
|
with_store_management do |store|
|
71
74
|
result = store.read("rabbit", :raw => true)
|
72
75
|
result.should include("ActiveSupport::Cache::Entry")
|
73
|
-
result.should include("\x0FOpenStruct{\x06:\tnameI\"\nbunny\x06:\
|
76
|
+
result.should include("\x0FOpenStruct{\x06:\tnameI\"\nbunny\x06:\x06EF")
|
74
77
|
end
|
75
78
|
end
|
76
79
|
else
|
@@ -174,7 +177,7 @@ module ActiveSupport
|
|
174
177
|
store.fetch("rub-a-dub").should be_nil
|
175
178
|
store.fetch("rub-a-dub") { "Flora de Cana" }
|
176
179
|
store.fetch("rub-a-dub").should === "Flora de Cana"
|
177
|
-
store.fetch("rabbit", :force => true)
|
180
|
+
store.fetch("rabbit", :force => true) # force cache miss
|
178
181
|
store.fetch("rabbit", :force => true, :expires_in => 1.second) { @white_rabbit }
|
179
182
|
store.fetch("rabbit").should == @white_rabbit
|
180
183
|
sleep 2
|
@@ -182,7 +185,7 @@ module ActiveSupport
|
|
182
185
|
end
|
183
186
|
end
|
184
187
|
|
185
|
-
if ::
|
188
|
+
if ::Redis::Store.rails3?
|
186
189
|
it "should read multiple keys" do
|
187
190
|
@store.write "irish whisky", "Jameson"
|
188
191
|
rabbit, whisky = @store.read_multi "rabbit", "irish whisky"
|
@@ -198,7 +201,78 @@ module ActiveSupport
|
|
198
201
|
end
|
199
202
|
end
|
200
203
|
|
201
|
-
|
204
|
+
describe "namespace" do
|
205
|
+
before :each do
|
206
|
+
@namespace = "theplaylist"
|
207
|
+
@store = ActiveSupport::Cache::RedisStore.new :namespace => @namespace
|
208
|
+
@data = @store.instance_variable_get(:@data)
|
209
|
+
@client = @data.instance_variable_get(:@client)
|
210
|
+
end
|
211
|
+
|
212
|
+
it "should read the data" do
|
213
|
+
@client.should_receive(:call).with(:get, "#{@namespace}:rabbit")
|
214
|
+
@store.read("rabbit")
|
215
|
+
end
|
216
|
+
|
217
|
+
if ::Redis::Store.rails3?
|
218
|
+
# it "should write the data"
|
219
|
+
# it "should write the data" do
|
220
|
+
# @data.should_receive(:set).with("#{@namespace}:rabbit"), Marshal.dump(ActiveSupport::Cache::Entry.new(@white_rabbit)))
|
221
|
+
# @store.write "rabbit", @white_rabbit
|
222
|
+
# end
|
223
|
+
else
|
224
|
+
it "should write the data" do
|
225
|
+
@client.should_receive(:call).with(:set, "#{@namespace}:rabbit", Marshal.dump(@white_rabbit))
|
226
|
+
@store.write "rabbit", @white_rabbit
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
it "should delete the data" do
|
231
|
+
@client.should_receive(:call).with(:del, "#{@namespace}:rabbit")
|
232
|
+
@store.delete "rabbit"
|
233
|
+
end
|
234
|
+
|
235
|
+
it "should delete matched data" do
|
236
|
+
@client.should_receive(:call).with(:del, "#{@namespace}:rabbit")
|
237
|
+
@client.should_receive(:call).with(:keys, "theplaylist:rabb*").and_return [ "#{@namespace}:rabbit" ]
|
238
|
+
@store.delete_matched "rabb*"
|
239
|
+
end
|
240
|
+
|
241
|
+
if ::Redis::Store.rails3?
|
242
|
+
it "should verify existence of an object in the store" do
|
243
|
+
@client.should_receive(:call).with(:get, "#{@namespace}:rabbit")
|
244
|
+
@store.exist?("rabbit")
|
245
|
+
end
|
246
|
+
else
|
247
|
+
it "should verify existence of an object in the store" do
|
248
|
+
@client.should_receive(:call).with(:exists, "#{@namespace}:rabbit")
|
249
|
+
@store.exist?("rabbit")
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
it "should increment a key" do
|
254
|
+
@client.should_receive(:call).with(:incrby, "#{@namespace}:counter", 1)
|
255
|
+
@store.increment "counter"
|
256
|
+
end
|
257
|
+
|
258
|
+
it "should decrement a key" do
|
259
|
+
@client.should_receive(:call).with(:decrby, "#{@namespace}:counter", 1)
|
260
|
+
@store.decrement "counter"
|
261
|
+
end
|
262
|
+
|
263
|
+
it "should fetch data" do
|
264
|
+
@client.should_receive(:call).with(:get, "#{@namespace}:rabbit")
|
265
|
+
@store.fetch "rabbit"
|
266
|
+
end
|
267
|
+
|
268
|
+
it "should read multiple keys" do
|
269
|
+
rabbits = [ Marshal.dump(@rabbit), Marshal.dump(@white_rabbit) ]
|
270
|
+
@client.should_receive(:call).with(:mget, "#{@namespace}:rabbit", "#{@namespace}:white_rabbit").and_return rabbits
|
271
|
+
@store.read_multi "rabbit", "white_rabbit"
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
if ::Redis::Store.rails3?
|
202
276
|
describe "notifications" do
|
203
277
|
it "should notify on #fetch" do
|
204
278
|
with_notifications do
|
@@ -207,7 +281,7 @@ module ActiveSupport
|
|
207
281
|
|
208
282
|
read, generate, write = @events
|
209
283
|
read.name.should == "cache_read.active_support"
|
210
|
-
read.payload.should == { :key => "radiohead" }
|
284
|
+
read.payload.should == { :key => "radiohead", :super_operation => :fetch }
|
211
285
|
generate.name.should == "cache_generate.active_support"
|
212
286
|
generate.payload.should == { :key => "radiohead" }
|
213
287
|
write.name.should == "cache_write.active_support"
|
@@ -221,7 +295,7 @@ module ActiveSupport
|
|
221
295
|
|
222
296
|
read = @events.first
|
223
297
|
read.name.should == "cache_read.active_support"
|
224
|
-
read.payload.should == { :key => "metallica" }
|
298
|
+
read.payload.should == { :key => "metallica", :hit => false }
|
225
299
|
end
|
226
300
|
|
227
301
|
# it "should notify on #read_multi" # Not supported in Rails 3
|
@@ -263,7 +337,7 @@ module ActiveSupport
|
|
263
337
|
|
264
338
|
delete_matched = @events.first
|
265
339
|
delete_matched.name.should == "cache_delete_matched.active_support"
|
266
|
-
delete_matched.payload.should == { :key => "afterhours*" }
|
340
|
+
delete_matched.payload.should == { :key => %("afterhours*") }
|
267
341
|
end
|
268
342
|
|
269
343
|
it "should notify on #increment" do
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
module Merb
|
4
4
|
module Cache
|
5
5
|
describe "Merb::Cache::RedisStore" do
|
6
6
|
before(:each) do
|
7
7
|
@store = Merb::Cache::RedisStore.new
|
8
|
-
@dstore = Merb::Cache::RedisStore.new :servers => ["
|
8
|
+
@dstore = Merb::Cache::RedisStore.new :servers => ["redis://127.0.0.1:6380/1", "redis://127.0.0.1:6381/1"]
|
9
9
|
@rabbit = OpenStruct.new :name => "bunny"
|
10
10
|
@white_rabbit = OpenStruct.new :color => "white"
|
11
11
|
with_store_management do |store|
|
@@ -18,21 +18,24 @@ module Merb
|
|
18
18
|
redis = instantiate_store
|
19
19
|
redis.to_s.should == "Redis Client connected to 127.0.0.1:6379 against DB 0"
|
20
20
|
|
21
|
-
redis = instantiate_store "
|
22
|
-
redis.to_s.should == "Redis Client connected to
|
21
|
+
redis = instantiate_store "redis://127.0.0.1"
|
22
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6379 against DB 0"
|
23
|
+
|
24
|
+
redis = instantiate_store "redis://127.0.0.1:6380"
|
25
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 0"
|
23
26
|
|
24
|
-
redis = instantiate_store "
|
25
|
-
redis.to_s.should == "Redis Client connected to
|
27
|
+
redis = instantiate_store "redis://127.0.0.1:6380/13"
|
28
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 13"
|
26
29
|
|
27
|
-
redis = instantiate_store "
|
28
|
-
redis.to_s.should == "Redis Client connected to
|
30
|
+
redis = instantiate_store "redis://127.0.0.1:6380/13/theplaylist"
|
31
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 13 with namespace theplaylist"
|
29
32
|
end
|
30
33
|
|
31
34
|
it "should instantiate a ring" do
|
32
35
|
store = instantiate_store
|
33
|
-
store.should be_kind_of(Redis::
|
34
|
-
store = instantiate_store ["
|
35
|
-
store.should be_kind_of(Redis::
|
36
|
+
store.should be_kind_of(Redis::Store)
|
37
|
+
store = instantiate_store ["redis://127.0.0.1:6379/0", "redis://127.0.0.1:6379/1"]
|
38
|
+
store.should be_kind_of(Redis::DistributedStore)
|
36
39
|
end
|
37
40
|
|
38
41
|
it "should verify if writable" do
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
class App
|
4
4
|
def initialize
|
@@ -19,7 +19,7 @@ module Sinatra
|
|
19
19
|
describe "Sinatra::Cache::RedisStore" do
|
20
20
|
before(:each) do
|
21
21
|
@store = Sinatra::Cache::RedisStore.new
|
22
|
-
@dstore = Sinatra::Cache::RedisStore.new "
|
22
|
+
@dstore = Sinatra::Cache::RedisStore.new "redis://127.0.0.1:6380/1", "redis://127.0.0.1:6381/1"
|
23
23
|
@rabbit = OpenStruct.new :name => "bunny"
|
24
24
|
@white_rabbit = OpenStruct.new :color => "white"
|
25
25
|
with_store_management do |store|
|
@@ -40,21 +40,24 @@ module Sinatra
|
|
40
40
|
redis = instantiate_store
|
41
41
|
redis.to_s.should == "Redis Client connected to 127.0.0.1:6379 against DB 0"
|
42
42
|
|
43
|
-
redis = instantiate_store "
|
44
|
-
redis.to_s.should == "Redis Client connected to
|
43
|
+
redis = instantiate_store "redis://127.0.0.1"
|
44
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6379 against DB 0"
|
45
|
+
|
46
|
+
redis = instantiate_store "redis://127.0.0.1:6380"
|
47
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 0"
|
45
48
|
|
46
|
-
redis = instantiate_store "
|
47
|
-
redis.to_s.should == "Redis Client connected to
|
49
|
+
redis = instantiate_store "redis://127.0.0.1:6380/13"
|
50
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 13"
|
48
51
|
|
49
|
-
redis = instantiate_store "
|
50
|
-
redis.to_s.should == "Redis Client connected to
|
52
|
+
redis = instantiate_store "redis://127.0.0.1:6380/13/theplaylist"
|
53
|
+
redis.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 13 with namespace theplaylist"
|
51
54
|
end
|
52
55
|
|
53
56
|
it "should instantiate a ring" do
|
54
57
|
store = instantiate_store
|
55
|
-
store.should be_kind_of(Redis::
|
56
|
-
store = instantiate_store ["
|
57
|
-
store.should be_kind_of(Redis::
|
58
|
+
store.should be_kind_of(Redis::Store)
|
59
|
+
store = instantiate_store ["redis://127.0.0.1:6379/0", "redis://127.0.0.1:6379/1"]
|
60
|
+
store.should be_kind_of(Redis::DistributedStore)
|
58
61
|
end
|
59
62
|
|
60
63
|
it "should read the data" do
|
data/spec/config/master.conf
CHANGED
data/spec/config/single.conf
CHANGED
data/spec/config/slave.conf
CHANGED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "I18n::Backend::Redis" do
|
4
|
+
before :each do
|
5
|
+
@backend = I18n::Backend::Redis.new
|
6
|
+
@store = @backend.store
|
7
|
+
I18n.backend = @backend
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should instantiate a store" do
|
11
|
+
@store.should be_kind_of(Redis::Store)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should instantiate a distributed store" do
|
15
|
+
store = I18n::Backend::Redis.new([ "redis://127.0.0.1:6379", "redis://127.0.0.1:6380" ]).store
|
16
|
+
store.should be_kind_of(Redis::DistributedStore)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should accept string uri" do
|
20
|
+
store = I18n::Backend::Redis.new("redis://127.0.0.1:6380/13/theplaylist").store
|
21
|
+
store.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 13 with namespace theplaylist"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should accept hash params" do
|
25
|
+
store = I18n::Backend::Redis.new(:host => "127.0.0.1", :port => "6380", :db =>"13", :namespace => "theplaylist").store
|
26
|
+
store.to_s.should == "Redis Client connected to 127.0.0.1:6380 against DB 13 with namespace theplaylist"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should store translations" do
|
30
|
+
I18n.backend.store_translations :en, :foo => { :bar => :baz }
|
31
|
+
I18n.t(:"foo.bar").should == :baz
|
32
|
+
|
33
|
+
I18n.backend.store_translations :en, "foo" => { "bar" => "baz" }
|
34
|
+
I18n.t(:"foo.bar").should == "baz"
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should get translations" do
|
38
|
+
I18n.backend.store_translations :en, :foo => { :bar => { :baz => :bang } }
|
39
|
+
I18n.t(:"foo.bar.baz").should == :bang
|
40
|
+
I18n.t(:"baz", :scope => :"foo.bar").should == :bang
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should not store proc translations" do
|
44
|
+
lambda { I18n.backend.store_translations :en, :foo => lambda {|| } }.should raise_error("Key-value stores cannot handle procs")
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should list available locales" do
|
48
|
+
locales = [ :en, :it, :es, :fr, :de ]
|
49
|
+
locales.each { |locale| I18n.backend.store_translations locale, :foo => "bar" }
|
50
|
+
available_locales = I18n.backend.available_locales
|
51
|
+
|
52
|
+
locales.each do |locale|
|
53
|
+
available_locales.should include(locale)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|