em-redis 0.1.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/History.txt +7 -0
- data/README.rdoc +4 -14
- data/Rakefile +17 -11
- data/em-redis.gemspec +27 -15
- data/lib/em-redis.rb +15 -4
- data/lib/em-redis/redis_protocol.rb +273 -344
- data/spec/live_redis_protocol_spec.rb +36 -39
- data/spec/redis_protocol_spec.rb +31 -23
- data/tasks/em-redis.rake +12 -0
- metadata +39 -10
@@ -76,14 +76,14 @@ EM.describe EM::Protocols::Redis, "connected to an empty db" do
|
|
76
76
|
|
77
77
|
should "be able to add a member to a nonexistent set" do
|
78
78
|
@c.sadd("set_foo", "bar") do |r|
|
79
|
-
r.should ==
|
79
|
+
r.should == true
|
80
80
|
done
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
84
|
should "be able to get info about the db as a hash" do
|
85
85
|
@c.info do |r|
|
86
|
-
r.should.key?
|
86
|
+
r.should.key? :redis_version
|
87
87
|
done
|
88
88
|
end
|
89
89
|
end
|
@@ -131,9 +131,9 @@ EM.describe EM::Protocols::Redis, "connected to a db containing some simple stri
|
|
131
131
|
|
132
132
|
should "be able to set a value if a key doesn't exist" do
|
133
133
|
@c.setnx "a", "foo" do |r|
|
134
|
-
r.should ==
|
134
|
+
r.should == false
|
135
135
|
@c.setnx "zzz", "foo" do |r|
|
136
|
-
r.should ==
|
136
|
+
r.should == true
|
137
137
|
done
|
138
138
|
end
|
139
139
|
end
|
@@ -141,9 +141,9 @@ EM.describe EM::Protocols::Redis, "connected to a db containing some simple stri
|
|
141
141
|
|
142
142
|
should "be able to test for the existence of a key" do
|
143
143
|
@c.exists "a" do |r|
|
144
|
-
r.should ==
|
144
|
+
r.should == true
|
145
145
|
@c.exists "zzz" do |r|
|
146
|
-
r.should ==
|
146
|
+
r.should == false
|
147
147
|
done
|
148
148
|
end
|
149
149
|
end
|
@@ -151,11 +151,11 @@ EM.describe EM::Protocols::Redis, "connected to a db containing some simple stri
|
|
151
151
|
|
152
152
|
should "be able to delete a key" do
|
153
153
|
@c.del "a" do |r|
|
154
|
-
r.should ==
|
154
|
+
r.should == true
|
155
155
|
@c.exists "a" do |r|
|
156
|
-
r.should ==
|
156
|
+
r.should == false
|
157
157
|
@c.del "a" do |r|
|
158
|
-
r.should ==
|
158
|
+
r.should == false
|
159
159
|
done
|
160
160
|
end
|
161
161
|
end
|
@@ -183,9 +183,9 @@ EM.describe EM::Protocols::Redis, "connected to a db containing some simple stri
|
|
183
183
|
|
184
184
|
should "be able to rename a key unless it exists" do
|
185
185
|
@c.renamenx "a", "x" do |r|
|
186
|
-
r.should ==
|
186
|
+
r.should == false
|
187
187
|
@c.renamenx "a", "zzz" do |r|
|
188
|
-
r.should ==
|
188
|
+
r.should == true
|
189
189
|
@c.get "zzz" do |r|
|
190
190
|
r.should == "b"
|
191
191
|
done
|
@@ -252,14 +252,14 @@ EM.describe EM::Protocols::Redis, "connected to a db containing a list" do
|
|
252
252
|
end
|
253
253
|
|
254
254
|
should "be able to get a range of values from a list" do
|
255
|
-
@c.lrange("foo", 0,1) do |r|
|
255
|
+
@c.lrange("foo", 0, 1) do |r|
|
256
256
|
r.should == ["a", "b"]
|
257
257
|
done
|
258
258
|
end
|
259
259
|
end
|
260
260
|
|
261
261
|
should "be able to 'ltrim' a list" do
|
262
|
-
@c.ltrim("foo", 0,1) do |r|
|
262
|
+
@c.ltrim("foo", 0, 1) do |r|
|
263
263
|
r.should == "OK"
|
264
264
|
@c.llen("foo") do |r|
|
265
265
|
r.should == 2
|
@@ -269,7 +269,7 @@ EM.describe EM::Protocols::Redis, "connected to a db containing a list" do
|
|
269
269
|
end
|
270
270
|
|
271
271
|
should "be able to 'rem' a list element" do
|
272
|
-
@c.lrem("foo", "a"
|
272
|
+
@c.lrem("foo", 0, "a") do |r|
|
273
273
|
r.should == 1
|
274
274
|
@c.llen("foo") do |r|
|
275
275
|
r.should == 2
|
@@ -309,9 +309,9 @@ EM.describe EM::Protocols::Redis, "connected to a db containing two sets" do
|
|
309
309
|
|
310
310
|
should "be able to add a new member to a set unless it is a duplicate" do
|
311
311
|
@c.sadd("foo", "d") do |r|
|
312
|
-
r.should ==
|
312
|
+
r.should == true # success
|
313
313
|
@c.sadd("foo", "a") do |r|
|
314
|
-
r.should ==
|
314
|
+
r.should == false # failure
|
315
315
|
@c.scard("foo") do |r|
|
316
316
|
r.should == 4
|
317
317
|
done
|
@@ -322,9 +322,9 @@ EM.describe EM::Protocols::Redis, "connected to a db containing two sets" do
|
|
322
322
|
|
323
323
|
should "be able to remove a set member if it exists" do
|
324
324
|
@c.srem("foo", "a") do |r|
|
325
|
-
r.should ==
|
325
|
+
r.should == true
|
326
326
|
@c.srem("foo", "z") do |r|
|
327
|
-
r.should ==
|
327
|
+
r.should == false
|
328
328
|
@c.scard("foo") do |r|
|
329
329
|
r.should == 2
|
330
330
|
done
|
@@ -342,9 +342,9 @@ EM.describe EM::Protocols::Redis, "connected to a db containing two sets" do
|
|
342
342
|
|
343
343
|
should "be able to detect set membership" do
|
344
344
|
@c.sismember("foo", "a") do |r|
|
345
|
-
r.should ==
|
345
|
+
r.should == true
|
346
346
|
@c.sismember("foo", "z") do |r|
|
347
|
-
r.should ==
|
347
|
+
r.should == false
|
348
348
|
done
|
349
349
|
end
|
350
350
|
end
|
@@ -367,25 +367,22 @@ EM.describe EM::Protocols::Redis, "connected to a db containing two sets" do
|
|
367
367
|
end
|
368
368
|
end
|
369
369
|
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
# done
|
377
|
-
# end
|
378
|
-
# end
|
370
|
+
should "be able to find the sets' union" do
|
371
|
+
@c.sunion("foo", "bar") do |r|
|
372
|
+
r.sort.should == ["a","b","c","d","e"]
|
373
|
+
done
|
374
|
+
end
|
375
|
+
end
|
379
376
|
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
377
|
+
should "be able to find and store the sets' union" do
|
378
|
+
@c.sunionstore("baz", "foo", "bar") do |r|
|
379
|
+
r.should == 5
|
380
|
+
@c.smembers("baz") do |r|
|
381
|
+
r.sort.should == ["a","b","c","d","e"]
|
382
|
+
done
|
383
|
+
end
|
384
|
+
end
|
385
|
+
end
|
389
386
|
|
390
387
|
should "be able to detect the type of a set" do
|
391
388
|
@c.type "foo" do |r|
|
@@ -411,7 +408,7 @@ EM.describe EM::Protocols::Redis, "connected to a db containing three linked lis
|
|
411
408
|
end
|
412
409
|
|
413
410
|
should "be able to collate a sorted set of data" do
|
414
|
-
@c.sort("foo", "*_sort",
|
411
|
+
@c.sort("foo", :by => "*_sort", :get => "*_data") do |r|
|
415
412
|
r.should == ["bar", "foo"]
|
416
413
|
done
|
417
414
|
end
|
data/spec/redis_protocol_spec.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/test_helper.rb")
|
2
2
|
|
3
3
|
EM.describe EM::Protocols::Redis do
|
4
|
+
default_timeout 1
|
4
5
|
|
5
6
|
before do
|
6
7
|
@c = TestConnection.new
|
@@ -8,27 +9,27 @@ EM.describe EM::Protocols::Redis do
|
|
8
9
|
|
9
10
|
# Inline request protocol
|
10
11
|
should 'send inline commands correctly' do
|
11
|
-
@c.
|
12
|
-
@c.sent_data.should == "
|
12
|
+
@c.call_command(["GET", 'a'])
|
13
|
+
@c.sent_data.should == "get a\r\n"
|
13
14
|
done
|
14
15
|
end
|
15
|
-
|
16
|
+
|
16
17
|
should "space-separate multiple inline arguments" do
|
17
|
-
@c.
|
18
|
-
@c.sent_data.should == "
|
18
|
+
@c.call_command(["GET", 'a', 'b', 'c'])
|
19
|
+
@c.sent_data.should == "get a b c\r\n"
|
19
20
|
done
|
20
21
|
end
|
21
22
|
|
22
23
|
# Multiline request protocol
|
23
24
|
should "send multiline commands correctly" do
|
24
|
-
@c.
|
25
|
-
@c.sent_data.should == "
|
25
|
+
@c.call_command(["SET", "foo", "abc"])
|
26
|
+
@c.sent_data.should == "set foo 3\r\nabc\r\n"
|
26
27
|
done
|
27
28
|
end
|
28
29
|
|
29
30
|
should "send integers in multiline commands correctly" do
|
30
|
-
@c.
|
31
|
-
@c.sent_data.should == "
|
31
|
+
@c.call_command(["SET", "foo", 1_000_000])
|
32
|
+
@c.sent_data.should == "set foo 7\r\n1000000\r\n"
|
32
33
|
done
|
33
34
|
end
|
34
35
|
|
@@ -37,18 +38,18 @@ EM.describe EM::Protocols::Redis do
|
|
37
38
|
# SORT
|
38
39
|
should "send sort command" do
|
39
40
|
@c.sort "foo"
|
40
|
-
@c.sent_data.should == "
|
41
|
+
@c.sent_data.should == "sort foo\r\n"
|
41
42
|
done
|
42
43
|
end
|
43
44
|
|
44
45
|
should "send sort command with all optional parameters" do
|
45
|
-
@c.sort "foo", "foo_sort_*", 0, 10, "data_*",
|
46
|
-
@c.sent_data.should == "
|
46
|
+
@c.sort "foo", :by => "foo_sort_*", :limit => [0, 10], :get => "data_*", :order => "DESC ALPHA"
|
47
|
+
@c.sent_data.should == "sort foo BY foo_sort_* GET data_* DESC ALPHA LIMIT 0 10\r\n"
|
47
48
|
done
|
48
49
|
end
|
49
50
|
|
50
51
|
should "parse keys response into an array" do
|
51
|
-
@c.keys
|
52
|
+
@c.keys("*") do |resp|
|
52
53
|
resp.should == ["a","b","c"]
|
53
54
|
done
|
54
55
|
end
|
@@ -58,7 +59,7 @@ EM.describe EM::Protocols::Redis do
|
|
58
59
|
|
59
60
|
# Inline response
|
60
61
|
should "parse an inline response" do
|
61
|
-
@c.
|
62
|
+
@c.call_command(["PING"]) do |resp|
|
62
63
|
resp.should == "OK"
|
63
64
|
done
|
64
65
|
end
|
@@ -66,16 +67,24 @@ EM.describe EM::Protocols::Redis do
|
|
66
67
|
end
|
67
68
|
|
68
69
|
should "parse an inline integer response" do
|
69
|
-
@c.
|
70
|
+
@c.call_command(["integer"]) do |resp|
|
70
71
|
resp.should == 0
|
71
72
|
done
|
72
73
|
end
|
73
74
|
@c.receive_data ":0\r\n"
|
74
75
|
end
|
75
76
|
|
77
|
+
should "call processor if any" do
|
78
|
+
@c.call_command(["EXISTS"]) do |resp|
|
79
|
+
resp.should == false
|
80
|
+
done
|
81
|
+
end
|
82
|
+
@c.receive_data ":0\r\n"
|
83
|
+
end
|
84
|
+
|
76
85
|
should "parse an inline error response" do
|
77
86
|
lambda do
|
78
|
-
@c.
|
87
|
+
@c.call_command(["blarg"])
|
79
88
|
@c.receive_data "-FAIL\r\n"
|
80
89
|
end.should.raise(EM::P::Redis::RedisError)
|
81
90
|
done
|
@@ -83,7 +92,7 @@ EM.describe EM::Protocols::Redis do
|
|
83
92
|
|
84
93
|
should "trigger a given error callback for inline error response instead of raising an error" do
|
85
94
|
lambda do
|
86
|
-
@c.
|
95
|
+
@c.call_command(["blarg"])
|
87
96
|
@c.on_error {|code| code.should == "FAIL"; done }
|
88
97
|
@c.receive_data "-FAIL\r\n"
|
89
98
|
end.should.not.raise(EM::P::Redis::RedisError)
|
@@ -92,7 +101,7 @@ EM.describe EM::Protocols::Redis do
|
|
92
101
|
|
93
102
|
# Bulk response
|
94
103
|
should "parse a bulk response" do
|
95
|
-
@c.
|
104
|
+
@c.call_command(["GET", "foo"]) do |resp|
|
96
105
|
resp.should == "bar"
|
97
106
|
done
|
98
107
|
end
|
@@ -101,16 +110,15 @@ EM.describe EM::Protocols::Redis do
|
|
101
110
|
end
|
102
111
|
|
103
112
|
should "distinguish nil in a bulk response" do
|
104
|
-
@c.
|
113
|
+
@c.call_command(["GET", "bar"]) do |resp|
|
105
114
|
resp.should == nil
|
106
115
|
end
|
107
116
|
@c.receive_data "$-1\r\n"
|
108
117
|
end
|
109
|
-
|
118
|
+
|
110
119
|
# Multi-bulk response
|
111
|
-
|
112
120
|
should "parse a multi-bulk response" do
|
113
|
-
@c.
|
121
|
+
@c.call_command(["RANGE", 0, 10]) do |resp|
|
114
122
|
resp.should == ["a", "b", "foo"]
|
115
123
|
done
|
116
124
|
end
|
@@ -121,7 +129,7 @@ EM.describe EM::Protocols::Redis do
|
|
121
129
|
end
|
122
130
|
|
123
131
|
should "distinguish nil in a multi-bulk response" do
|
124
|
-
@c.
|
132
|
+
@c.call_command(["RANGE", 0, 10]) do |resp|
|
125
133
|
resp.should == ["a", nil, "foo"]
|
126
134
|
done
|
127
135
|
end
|
data/tasks/em-redis.rake
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
namespace :redis do
|
2
|
+
desc "Test em-redis against a live Redis"
|
3
|
+
task :live_test do
|
4
|
+
require 'bacon'
|
5
|
+
sh "bacon spec/live_redis_protocol_spec.rb"
|
6
|
+
end
|
7
|
+
|
8
|
+
desc "Test em-redis offline"
|
9
|
+
task :offline_test do
|
10
|
+
sh "bacon spec/redis_protocol_spec.rb"
|
11
|
+
end
|
12
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-redis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: "0.2"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Broad
|
@@ -13,14 +13,44 @@ date: 2009-12-15 00:00:00 +03:00
|
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: eventmachine
|
17
17
|
type: :runtime
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 0.12.11
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: bacon
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.0
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: em-spec
|
37
|
+
type: :development
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.2.0
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: bones
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 3.2.0
|
24
54
|
version:
|
25
55
|
description: |-
|
26
56
|
An EventMachine[http://rubyeventmachine.com/] based library for interacting with the very cool Redis[http://code.google.com/p/redis/] data store by Salvatore 'antirez' Sanfilippo.
|
@@ -28,12 +58,8 @@ description: |-
|
|
28
58
|
|
29
59
|
This library is only useful when used as part of an application that relies on
|
30
60
|
Event Machine's event loop. It implements an EM-based client protocol, which
|
31
|
-
leverages the non-blocking nature of the EM interface to
|
61
|
+
leverages the non-blocking nature of the EM interface to achieve significant
|
32
62
|
parallelization without threads.
|
33
|
-
|
34
|
-
WARNING: this library is my first attempt to write an evented client protocol,
|
35
|
-
and isn't currently used in production anywhere. All that bit in the license
|
36
|
-
about not being warranted to work for any particular purpose really applies.
|
37
63
|
email: jonathan@relativepath.org
|
38
64
|
executables: []
|
39
65
|
|
@@ -41,18 +67,21 @@ extensions: []
|
|
41
67
|
|
42
68
|
extra_rdoc_files:
|
43
69
|
- History.txt
|
70
|
+
- Manifest.txt
|
44
71
|
- README.rdoc
|
45
72
|
files:
|
73
|
+
- .gitignore
|
46
74
|
- History.txt
|
47
75
|
- Manifest.txt
|
48
76
|
- README.rdoc
|
49
|
-
- em-redis.gemspec
|
50
77
|
- Rakefile
|
78
|
+
- em-redis.gemspec
|
51
79
|
- lib/em-redis.rb
|
52
80
|
- lib/em-redis/redis_protocol.rb
|
53
|
-
- spec/test_helper.rb
|
54
81
|
- spec/live_redis_protocol_spec.rb
|
55
82
|
- spec/redis_protocol_spec.rb
|
83
|
+
- spec/test_helper.rb
|
84
|
+
- tasks/em-redis.rake
|
56
85
|
has_rdoc: true
|
57
86
|
homepage:
|
58
87
|
licenses: []
|