redis 2.2.2 → 3.0.0.rc1
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.
- data/.gitignore +2 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +65 -1
- data/README.md +6 -0
- data/Rakefile +19 -27
- data/lib/redis.rb +737 -170
- data/lib/redis/client.rb +82 -67
- data/lib/redis/connection/command_helper.rb +15 -16
- data/lib/redis/connection/hiredis.rb +6 -3
- data/lib/redis/connection/ruby.rb +2 -1
- data/lib/redis/connection/synchrony.rb +3 -1
- data/lib/redis/distributed.rb +20 -18
- data/lib/redis/errors.rb +38 -0
- data/lib/redis/hash_ring.rb +2 -2
- data/lib/redis/pipeline.rb +91 -19
- data/lib/redis/subscribe.rb +1 -16
- data/lib/redis/version.rb +1 -1
- data/redis.gemspec +30 -11
- data/test/command_map_test.rb +29 -0
- data/test/commands_on_hashes_test.rb +3 -3
- data/test/commands_on_lists_test.rb +1 -1
- data/test/commands_on_sets_test.rb +0 -2
- data/test/commands_on_sorted_sets_test.rb +8 -9
- data/test/commands_on_strings_test.rb +3 -3
- data/test/commands_on_value_types_test.rb +0 -1
- data/test/connection_handling_test.rb +120 -4
- data/test/distributed_commands_on_hashes_test.rb +0 -1
- data/test/distributed_commands_on_lists_test.rb +0 -1
- data/test/distributed_commands_on_sets_test.rb +0 -1
- data/test/distributed_commands_on_sorted_sets_test.rb +19 -0
- data/test/distributed_commands_on_strings_test.rb +0 -1
- data/test/distributed_commands_on_value_types_test.rb +0 -1
- data/test/distributed_connection_handling_test.rb +0 -1
- data/test/distributed_key_tags_test.rb +0 -1
- data/test/distributed_persistence_control_commands_test.rb +0 -1
- data/test/distributed_publish_subscribe_test.rb +1 -2
- data/test/distributed_remote_server_control_commands_test.rb +2 -3
- data/test/distributed_transactions_test.rb +0 -1
- data/test/encoding_test.rb +0 -1
- data/test/helper.rb +14 -4
- data/test/helper_test.rb +8 -0
- data/test/internals_test.rb +25 -33
- data/test/lint/hashes.rb +17 -3
- data/test/lint/internals.rb +2 -3
- data/test/lint/lists.rb +17 -3
- data/test/lint/sets.rb +30 -6
- data/test/lint/sorted_sets.rb +56 -27
- data/test/lint/strings.rb +9 -13
- data/test/lint/value_types.rb +12 -15
- data/test/persistence_control_commands_test.rb +0 -1
- data/test/pipelining_commands_test.rb +69 -6
- data/test/publish_subscribe_test.rb +1 -1
- data/test/redis_mock.rb +14 -5
- data/test/remote_server_control_commands_test.rb +8 -2
- data/test/sorting_test.rb +0 -1
- data/test/test.conf +1 -0
- data/test/transactions_test.rb +88 -15
- data/test/unknown_commands_test.rb +1 -2
- data/test/url_param_test.rb +0 -1
- metadata +68 -16
- data/lib/redis/compat.rb +0 -21
data/test/lint/strings.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
require File.expand_path("../redis_mock", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
include RedisMock::Helper
|
4
|
+
|
1
5
|
test "SET and GET" do |r|
|
2
6
|
r.set("foo", "s1")
|
3
7
|
|
@@ -33,14 +37,12 @@ test "SET and GET with ASCII characters" do |r|
|
|
33
37
|
end
|
34
38
|
end if defined?(Encoding)
|
35
39
|
|
36
|
-
test "SETEX" do
|
37
|
-
|
38
|
-
|
39
|
-
assert "s1" == r.get("foo")
|
40
|
-
|
41
|
-
sleep 2
|
40
|
+
test "SETEX" do
|
41
|
+
redis_mock(:setex => lambda { |*args| "+#{args.join(" ")}" }) do
|
42
|
+
r = Redis.new(OPTIONS.merge(:port => 6380))
|
42
43
|
|
43
|
-
|
44
|
+
assert_equal "foo 1 s1", r.setex("foo", 1, "s1")
|
45
|
+
end
|
44
46
|
end
|
45
47
|
|
46
48
|
test "GETSET" do |r|
|
@@ -95,12 +97,6 @@ test "APPEND" do |r|
|
|
95
97
|
assert "s1" == r.get("foo")
|
96
98
|
end
|
97
99
|
|
98
|
-
test "SUBSTR" do |r|
|
99
|
-
r.set "foo", "lorem"
|
100
|
-
|
101
|
-
assert "ore" == r.substr("foo", 1, 3)
|
102
|
-
end
|
103
|
-
|
104
100
|
test "GETBIT" do |r|
|
105
101
|
r.set("foo", "a")
|
106
102
|
|
data/test/lint/value_types.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
require File.expand_path("../redis_mock", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
include RedisMock::Helper
|
4
|
+
|
1
5
|
test "EXISTS" do |r|
|
2
6
|
assert false == r.exists("foo")
|
3
7
|
|
@@ -23,25 +27,19 @@ test "KEYS" do |r|
|
|
23
27
|
end
|
24
28
|
|
25
29
|
test "EXPIRE" do |r|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
assert "s1" == r.get("foo")
|
30
|
-
|
31
|
-
sleep 2
|
30
|
+
redis_mock(:expire => lambda { |*args| args == ["foo", "1"] ? ":1" : ":0" }) do
|
31
|
+
r = Redis.new(OPTIONS.merge(:port => 6380))
|
32
32
|
|
33
|
-
|
33
|
+
assert r.expire("foo", 1)
|
34
|
+
end
|
34
35
|
end
|
35
36
|
|
36
37
|
test "EXPIREAT" do |r|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
assert "s1" == r.get("foo")
|
38
|
+
redis_mock(:expireat => lambda { |*args| args == ["foo", "1328236326"] ? ":1" : ":0" }) do
|
39
|
+
r = Redis.new(OPTIONS.merge(:port => 6380))
|
41
40
|
|
42
|
-
|
43
|
-
|
44
|
-
assert nil == r.get("foo")
|
41
|
+
assert r.expireat("foo", 1328236326)
|
42
|
+
end
|
45
43
|
end
|
46
44
|
|
47
45
|
test "PERSIST" do |r|
|
@@ -81,4 +79,3 @@ test "MOVE" do |r|
|
|
81
79
|
assert "s1" == r.get("foo")
|
82
80
|
assert "s3" == r.get("bar")
|
83
81
|
end
|
84
|
-
|
@@ -76,6 +76,69 @@ test "Returning the result of a pipeline" do |r|
|
|
76
76
|
assert ["OK", "bar", nil] == result
|
77
77
|
end
|
78
78
|
|
79
|
+
test "Assignment of results inside the block" do |r|
|
80
|
+
r.pipelined do
|
81
|
+
@first = r.sadd("foo", 1)
|
82
|
+
@second = r.sadd("foo", 1)
|
83
|
+
end
|
84
|
+
|
85
|
+
assert_equal true, @first.value
|
86
|
+
assert_equal false, @second.value
|
87
|
+
end
|
88
|
+
|
89
|
+
# Although we could support accessing the values in these futures,
|
90
|
+
# it doesn't make a lot of sense.
|
91
|
+
test "Assignment of results inside the block with errors" do |r|
|
92
|
+
assert_raise do
|
93
|
+
r.pipelined do
|
94
|
+
r.doesnt_exist
|
95
|
+
@first = r.sadd("foo", 1)
|
96
|
+
r.doesnt_exist
|
97
|
+
@second = r.sadd("foo", 1)
|
98
|
+
r.doesnt_exist
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
assert_raise(Redis::FutureNotReady) { @first.value }
|
103
|
+
assert_raise(Redis::FutureNotReady) { @second.value }
|
104
|
+
end
|
105
|
+
|
106
|
+
test "Assignment of results inside a nested block" do |r|
|
107
|
+
r.pipelined do
|
108
|
+
@first = r.sadd("foo", 1)
|
109
|
+
|
110
|
+
r.pipelined do
|
111
|
+
@second = r.sadd("foo", 1)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
assert_equal true, @first.value
|
116
|
+
assert_equal false, @second.value
|
117
|
+
end
|
118
|
+
|
119
|
+
test "Futures raise when confused with something else" do |r|
|
120
|
+
r.pipelined do
|
121
|
+
@result = r.sadd("foo", 1)
|
122
|
+
end
|
123
|
+
|
124
|
+
assert_raise(NoMethodError) { @result.to_s }
|
125
|
+
end
|
126
|
+
|
127
|
+
test "Futures raise when trying to access their values too early" do |r|
|
128
|
+
r.pipelined do
|
129
|
+
assert_raise(Redis::FutureNotReady) do
|
130
|
+
r.sadd("foo", 1).value
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
test "Returning the result of an empty pipeline" do |r|
|
136
|
+
result = r.pipelined do
|
137
|
+
end
|
138
|
+
|
139
|
+
assert [] == result
|
140
|
+
end
|
141
|
+
|
79
142
|
test "Nesting pipeline blocks" do |r|
|
80
143
|
r.pipelined do
|
81
144
|
r.set("foo", "s1")
|
@@ -88,29 +151,29 @@ test "Nesting pipeline blocks" do |r|
|
|
88
151
|
assert "s2" == r.get("bar")
|
89
152
|
end
|
90
153
|
|
91
|
-
test "INFO in a pipeline" do |r|
|
154
|
+
test "INFO in a pipeline returns hash" do |r|
|
92
155
|
result = r.pipelined do
|
93
156
|
r.info
|
94
157
|
end
|
95
158
|
|
96
|
-
assert result.first.kind_of?(
|
159
|
+
assert result.first.kind_of?(Hash)
|
97
160
|
end
|
98
161
|
|
99
|
-
test "CONFIG GET in a pipeline" do |r|
|
162
|
+
test "CONFIG GET in a pipeline returns hash" do |r|
|
100
163
|
result = r.pipelined do
|
101
164
|
r.config(:get, "*")
|
102
165
|
end
|
103
166
|
|
104
|
-
assert result.first.kind_of?(
|
167
|
+
assert result.first.kind_of?(Hash)
|
105
168
|
end
|
106
169
|
|
107
|
-
test "HGETALL in a pipeline
|
170
|
+
test "HGETALL in a pipeline returns hash" do |r|
|
108
171
|
r.hmset("hash", "field", "value")
|
109
172
|
result = r.pipelined do
|
110
173
|
r.hgetall("hash")
|
111
174
|
end
|
112
175
|
|
113
|
-
assert
|
176
|
+
assert result.first == { "field" => "value" }
|
114
177
|
end
|
115
178
|
|
116
179
|
test "KEYS in a pipeline" do |r|
|
@@ -112,7 +112,7 @@ test "SUBSCRIBE within SUBSCRIBE" do |r|
|
|
112
112
|
end
|
113
113
|
|
114
114
|
test "other commands within a SUBSCRIBE" do |r|
|
115
|
-
assert_raise
|
115
|
+
assert_raise Redis::CommandError do
|
116
116
|
r.subscribe("foo") do |on|
|
117
117
|
on.subscribe do |channel, total|
|
118
118
|
r.set("bar", "s2")
|
data/test/redis_mock.rb
CHANGED
@@ -10,9 +10,10 @@ module RedisMock
|
|
10
10
|
@thread = Thread.new { run(&block) }
|
11
11
|
end
|
12
12
|
|
13
|
-
#
|
14
|
-
#
|
13
|
+
# Bail out of @server.accept before closing the socket. This is required
|
14
|
+
# to avoid EADDRINUSE after a couple of iterations.
|
15
15
|
def shutdown
|
16
|
+
@thread.terminate if @thread
|
16
17
|
@server.close if @server
|
17
18
|
rescue => ex
|
18
19
|
$stderr.puts "Error closing mock server: #{ex.message}" if VERBOSE
|
@@ -34,12 +35,18 @@ module RedisMock
|
|
34
35
|
|
35
36
|
response = yield(*parts)
|
36
37
|
|
37
|
-
|
38
|
+
# Convert a nil response to :close
|
39
|
+
response ||= :close
|
40
|
+
|
41
|
+
if response == :exit
|
42
|
+
session.shutdown(Socket::SHUT_RDWR)
|
43
|
+
return # exit server body
|
44
|
+
elsif response == :close
|
38
45
|
session.shutdown(Socket::SHUT_RDWR)
|
39
|
-
break
|
46
|
+
break # exit connection body
|
40
47
|
else
|
41
48
|
session.write(response)
|
42
|
-
session.write("\r\n")
|
49
|
+
session.write("\r\n") unless response.end_with?("\r\n")
|
43
50
|
end
|
44
51
|
end
|
45
52
|
rescue Errno::ECONNRESET
|
@@ -49,6 +56,8 @@ module RedisMock
|
|
49
56
|
rescue => ex
|
50
57
|
$stderr.puts "Error running mock server: #{ex.message}" if VERBOSE
|
51
58
|
$stderr.puts ex.backtrace if VERBOSE
|
59
|
+
ensure
|
60
|
+
@server.close
|
52
61
|
end
|
53
62
|
end
|
54
63
|
|
@@ -16,8 +16,8 @@ test "INFO" do |r|
|
|
16
16
|
end
|
17
17
|
|
18
18
|
test "INFO COMMANDSTATS" do |r|
|
19
|
-
# Only available on Redis >= 2.
|
20
|
-
next if r
|
19
|
+
# Only available on Redis >= 2.9.0
|
20
|
+
next if version(r) < 209000
|
21
21
|
|
22
22
|
r.config(:resetstat)
|
23
23
|
r.ping
|
@@ -80,3 +80,9 @@ test "SYNC" do |r|
|
|
80
80
|
assert "OK" == redis.sync
|
81
81
|
end
|
82
82
|
end
|
83
|
+
|
84
|
+
test "SLOWLOG" do |r|
|
85
|
+
r.slowlog(:reset)
|
86
|
+
result = r.slowlog(:len)
|
87
|
+
assert result == 0
|
88
|
+
end
|
data/test/sorting_test.rb
CHANGED
data/test/test.conf
CHANGED
data/test/transactions_test.rb
CHANGED
@@ -23,7 +23,61 @@ test "MULTI/EXEC with a block" do |r|
|
|
23
23
|
end
|
24
24
|
|
25
25
|
assert "s1" == r.get("foo")
|
26
|
+
end
|
27
|
+
|
28
|
+
test "MULTI/EXEC with a block doesn't return replies for MULTI and EXEC" do |r|
|
29
|
+
r1, r2, nothing_else = r.multi do |multi|
|
30
|
+
multi.set "foo", "s1"
|
31
|
+
multi.get "foo"
|
32
|
+
end
|
33
|
+
|
34
|
+
assert_equal "OK", r1
|
35
|
+
assert_equal "s1", r2
|
36
|
+
assert_equal nil, nothing_else
|
37
|
+
end
|
38
|
+
|
39
|
+
test "Assignment inside MULTI/EXEC block" do |r|
|
40
|
+
r.multi do |m|
|
41
|
+
@first = m.sadd("foo", 1)
|
42
|
+
@second = m.sadd("foo", 1)
|
43
|
+
end
|
44
|
+
|
45
|
+
assert_equal true, @first.value
|
46
|
+
assert_equal false, @second.value
|
47
|
+
end
|
48
|
+
|
49
|
+
# Although we could support accessing the values in these futures,
|
50
|
+
# it doesn't make a lot of sense.
|
51
|
+
test "Assignment inside MULTI/EXEC block with delayed command errors" do |r|
|
52
|
+
assert_raise do
|
53
|
+
r.multi do |m|
|
54
|
+
@first = m.set("foo", "s1")
|
55
|
+
@second = m.incr("foo") # not an integer
|
56
|
+
@third = m.lpush("foo", "value") # wrong kind of value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
assert_equal "OK", @first.value
|
61
|
+
assert_raise { @second.value }
|
62
|
+
assert_raise { @third.value }
|
63
|
+
end
|
64
|
+
|
65
|
+
test "Assignment inside MULTI/EXEC block with immediate command errors" do |r|
|
66
|
+
assert_raise do
|
67
|
+
r.multi do |m|
|
68
|
+
m.doesnt_exist
|
69
|
+
@first = m.sadd("foo", 1)
|
70
|
+
m.doesnt_exist
|
71
|
+
@second = m.sadd("foo", 1)
|
72
|
+
m.doesnt_exist
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
assert_raise(Redis::FutureNotReady) { @first.value }
|
77
|
+
assert_raise(Redis::FutureNotReady) { @second.value }
|
78
|
+
end
|
26
79
|
|
80
|
+
test "Raise immediate errors in MULTI/EXEC" do |r|
|
27
81
|
assert_raise(RuntimeError) do
|
28
82
|
r.multi do |multi|
|
29
83
|
multi.set "bar", "s2"
|
@@ -36,29 +90,49 @@ test "MULTI/EXEC with a block" do |r|
|
|
36
90
|
assert nil == r.get("baz")
|
37
91
|
end
|
38
92
|
|
39
|
-
test "
|
40
|
-
|
41
|
-
|
42
|
-
m.unknown_command
|
93
|
+
test "Transformed replies as return values for MULTI/EXEC block" do |r|
|
94
|
+
info, _ = r.multi do |m|
|
95
|
+
r.info
|
43
96
|
end
|
44
97
|
|
45
|
-
assert
|
46
|
-
|
47
|
-
|
98
|
+
assert info.kind_of?(Hash)
|
99
|
+
end
|
100
|
+
|
101
|
+
test "Transformed replies inside MULTI/EXEC block" do |r|
|
102
|
+
r.multi do |m|
|
103
|
+
@info = r.info
|
104
|
+
end
|
105
|
+
|
106
|
+
assert @info.value.kind_of?(Hash)
|
48
107
|
end
|
49
108
|
|
50
|
-
test "
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
109
|
+
test "Raise command errors in MULTI/EXEC" do |r|
|
110
|
+
assert_raise do
|
111
|
+
r.multi do |m|
|
112
|
+
m.set("foo", "s1")
|
113
|
+
m.incr("foo") # not an integer
|
114
|
+
m.lpush("foo", "value") # wrong kind of value
|
115
|
+
end
|
55
116
|
end
|
56
117
|
|
57
|
-
assert result[1].message =~ /not an integer/i
|
58
|
-
assert result[2].message =~ /wrong kind of value/i
|
59
118
|
assert "s1" == r.get("foo")
|
60
119
|
end
|
61
120
|
|
121
|
+
test "Raise command errors when accessing futures after MULTI/EXEC" do |r|
|
122
|
+
begin
|
123
|
+
r.multi do |m|
|
124
|
+
m.set("foo", "s1")
|
125
|
+
@counter = m.incr("foo") # not an integer
|
126
|
+
end
|
127
|
+
rescue Exception
|
128
|
+
# Not gonna deal with it
|
129
|
+
end
|
130
|
+
|
131
|
+
# We should test for Redis::Error here, but hiredis doesn't yet do
|
132
|
+
# custom error classes.
|
133
|
+
assert_raise(RuntimeError) { @counter.value }
|
134
|
+
end
|
135
|
+
|
62
136
|
test "MULTI with a block yielding the client" do |r|
|
63
137
|
r.multi do |multi|
|
64
138
|
multi.set "foo", "s1"
|
@@ -97,4 +171,3 @@ test "UNWATCH with a modified key" do |r|
|
|
97
171
|
|
98
172
|
assert "s2" == r.get("foo")
|
99
173
|
end
|
100
|
-
|
data/test/url_param_test.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 3.0.0.rc1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ezra Zygmuntowicz
|
@@ -14,19 +14,66 @@ authors:
|
|
14
14
|
- Michel Martens
|
15
15
|
- Damian Janowski
|
16
16
|
- Pieter Noordhuis
|
17
|
-
autorequire:
|
17
|
+
autorequire:
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
|
-
date:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
date: 2012-03-10 00:00:00.000000000 Z
|
21
|
+
dependencies:
|
22
|
+
- !ruby/object:Gem::Dependency
|
23
|
+
name: rake
|
24
|
+
requirement: &2152542300 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
type: :development
|
31
|
+
prerelease: false
|
32
|
+
version_requirements: *2152542300
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: cutest
|
35
|
+
requirement: &2152541580 !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
type: :development
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: *2152541580
|
44
|
+
- !ruby/object:Gem::Dependency
|
45
|
+
name: hiredis
|
46
|
+
requirement: &2152541000 !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
type: :development
|
53
|
+
prerelease: false
|
54
|
+
version_requirements: *2152541000
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: em-synchrony
|
57
|
+
requirement: &2152540580 !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: *2152540580
|
66
|
+
description: ! " A simple Ruby client trying to match Redis' API one-to-one while
|
67
|
+
still providing a Rubystic interface.\n It features thread safety, client-side
|
68
|
+
sharding, and an obsession for performance.\n"
|
69
|
+
email:
|
70
|
+
- redis-db@googlegroups.com
|
25
71
|
executables: []
|
26
72
|
extensions: []
|
27
73
|
extra_rdoc_files: []
|
28
74
|
files:
|
29
75
|
- .gitignore
|
76
|
+
- .yardopts
|
30
77
|
- CHANGELOG.md
|
31
78
|
- LICENSE
|
32
79
|
- README.md
|
@@ -48,7 +95,6 @@ files:
|
|
48
95
|
- examples/unicorn/unicorn.rb
|
49
96
|
- lib/redis.rb
|
50
97
|
- lib/redis/client.rb
|
51
|
-
- lib/redis/compat.rb
|
52
98
|
- lib/redis/connection.rb
|
53
99
|
- lib/redis/connection/command_helper.rb
|
54
100
|
- lib/redis/connection/hiredis.rb
|
@@ -56,11 +102,13 @@ files:
|
|
56
102
|
- lib/redis/connection/ruby.rb
|
57
103
|
- lib/redis/connection/synchrony.rb
|
58
104
|
- lib/redis/distributed.rb
|
105
|
+
- lib/redis/errors.rb
|
59
106
|
- lib/redis/hash_ring.rb
|
60
107
|
- lib/redis/pipeline.rb
|
61
108
|
- lib/redis/subscribe.rb
|
62
109
|
- lib/redis/version.rb
|
63
110
|
- redis.gemspec
|
111
|
+
- test/command_map_test.rb
|
64
112
|
- test/commands_on_hashes_test.rb
|
65
113
|
- test/commands_on_lists_test.rb
|
66
114
|
- test/commands_on_sets_test.rb
|
@@ -73,6 +121,7 @@ files:
|
|
73
121
|
- test/distributed_commands_on_hashes_test.rb
|
74
122
|
- test/distributed_commands_on_lists_test.rb
|
75
123
|
- test/distributed_commands_on_sets_test.rb
|
124
|
+
- test/distributed_commands_on_sorted_sets_test.rb
|
76
125
|
- test/distributed_commands_on_strings_test.rb
|
77
126
|
- test/distributed_commands_on_value_types_test.rb
|
78
127
|
- test/distributed_commands_requiring_clustering_test.rb
|
@@ -88,6 +137,7 @@ files:
|
|
88
137
|
- test/encoding_test.rb
|
89
138
|
- test/error_replies_test.rb
|
90
139
|
- test/helper.rb
|
140
|
+
- test/helper_test.rb
|
91
141
|
- test/internals_test.rb
|
92
142
|
- test/lint/hashes.rb
|
93
143
|
- test/lint/internals.rb
|
@@ -108,8 +158,7 @@ files:
|
|
108
158
|
- test/transactions_test.rb
|
109
159
|
- test/unknown_commands_test.rb
|
110
160
|
- test/url_param_test.rb
|
111
|
-
|
112
|
-
homepage: http://github.com/ezmobius/redis-rb
|
161
|
+
homepage: https://github.com/ezmobius/redis-rb
|
113
162
|
licenses: []
|
114
163
|
post_install_message:
|
115
164
|
rdoc_options: []
|
@@ -124,16 +173,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
173
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
174
|
none: false
|
126
175
|
requirements:
|
127
|
-
- - ! '
|
176
|
+
- - ! '>'
|
128
177
|
- !ruby/object:Gem::Version
|
129
|
-
version:
|
178
|
+
version: 1.3.1
|
130
179
|
requirements: []
|
131
|
-
rubyforge_project:
|
132
|
-
rubygems_version: 1.
|
180
|
+
rubyforge_project:
|
181
|
+
rubygems_version: 1.8.10
|
133
182
|
signing_key:
|
134
183
|
specification_version: 3
|
135
|
-
summary: Ruby client library for Redis
|
184
|
+
summary: A Ruby client library for the Redis key-value store.
|
136
185
|
test_files:
|
186
|
+
- test/command_map_test.rb
|
137
187
|
- test/commands_on_hashes_test.rb
|
138
188
|
- test/commands_on_lists_test.rb
|
139
189
|
- test/commands_on_sets_test.rb
|
@@ -146,6 +196,7 @@ test_files:
|
|
146
196
|
- test/distributed_commands_on_hashes_test.rb
|
147
197
|
- test/distributed_commands_on_lists_test.rb
|
148
198
|
- test/distributed_commands_on_sets_test.rb
|
199
|
+
- test/distributed_commands_on_sorted_sets_test.rb
|
149
200
|
- test/distributed_commands_on_strings_test.rb
|
150
201
|
- test/distributed_commands_on_value_types_test.rb
|
151
202
|
- test/distributed_commands_requiring_clustering_test.rb
|
@@ -161,6 +212,7 @@ test_files:
|
|
161
212
|
- test/encoding_test.rb
|
162
213
|
- test/error_replies_test.rb
|
163
214
|
- test/helper.rb
|
215
|
+
- test/helper_test.rb
|
164
216
|
- test/internals_test.rb
|
165
217
|
- test/lint/hashes.rb
|
166
218
|
- test/lint/internals.rb
|