redis-store 1.0.0.beta2 → 1.0.0.beta3
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.
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
|