redis 2.0.3 → 2.0.4
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/Rakefile +2 -1
- data/lib/redis.rb +5 -13
- data/lib/redis/client.rb +36 -18
- data/lib/redis/url.rb +46 -0
- metadata +6 -3
data/Rakefile
CHANGED
data/lib/redis.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'socket'
|
2
2
|
|
3
3
|
class Redis
|
4
|
-
VERSION = "2.0.
|
4
|
+
VERSION = "2.0.4"
|
5
5
|
|
6
6
|
class ProtocolError < RuntimeError
|
7
7
|
def initialize(reply_type)
|
@@ -284,6 +284,10 @@ class Redis
|
|
284
284
|
@client.call(:zrangebyscore, key, min, max, *command.to_a)
|
285
285
|
end
|
286
286
|
|
287
|
+
def zcount(key, start, stop)
|
288
|
+
@client.call(:zcount, key, start, stop)
|
289
|
+
end
|
290
|
+
|
287
291
|
def zrevrange(key, start, stop, options = {})
|
288
292
|
command = CommandOptions.new(options) do |c|
|
289
293
|
c.bool :with_scores
|
@@ -617,18 +621,6 @@ private
|
|
617
621
|
|
618
622
|
end
|
619
623
|
|
620
|
-
begin
|
621
|
-
if RUBY_VERSION >= '1.9'
|
622
|
-
require 'timeout'
|
623
|
-
Redis::Timer = Timeout
|
624
|
-
else
|
625
|
-
require 'system_timer'
|
626
|
-
Redis::Timer = SystemTimer
|
627
|
-
end
|
628
|
-
rescue LoadError
|
629
|
-
Redis::Timer = nil
|
630
|
-
end
|
631
|
-
|
632
624
|
require 'redis/client'
|
633
625
|
require 'redis/pipeline'
|
634
626
|
require 'redis/subscribe'
|
data/lib/redis/client.rb
CHANGED
@@ -84,7 +84,6 @@ class Redis
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def read
|
87
|
-
|
88
87
|
# We read the first byte using read() mainly because gets() is
|
89
88
|
# immune to raw socket timeouts.
|
90
89
|
begin
|
@@ -182,7 +181,7 @@ class Redis
|
|
182
181
|
def format_bulk_reply(line)
|
183
182
|
bulklen = line.to_i
|
184
183
|
return if bulklen == -1
|
185
|
-
reply = @sock.read(bulklen)
|
184
|
+
reply = encode(@sock.read(bulklen))
|
186
185
|
@sock.read(2) # Discard CRLF.
|
187
186
|
reply
|
188
187
|
end
|
@@ -191,9 +190,7 @@ class Redis
|
|
191
190
|
n = line.to_i
|
192
191
|
return if n == -1
|
193
192
|
|
194
|
-
|
195
|
-
n.times { reply << read }
|
196
|
-
reply
|
193
|
+
Array.new(n) { read }
|
197
194
|
end
|
198
195
|
|
199
196
|
def logging(commands)
|
@@ -211,18 +208,9 @@ class Redis
|
|
211
208
|
end
|
212
209
|
end
|
213
210
|
|
214
|
-
if defined?(Timeout)
|
215
|
-
TimeoutError = Timeout::Error
|
216
|
-
else
|
217
|
-
TimeoutError = Exception
|
218
|
-
end
|
219
|
-
|
220
211
|
def connect_to(host, port)
|
221
|
-
|
212
|
+
with_timeout(@timeout) do
|
222
213
|
@sock = TCPSocket.new(host, port)
|
223
|
-
rescue TimeoutError
|
224
|
-
@sock = nil
|
225
|
-
raise
|
226
214
|
end
|
227
215
|
|
228
216
|
@sock.setsockopt Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1
|
@@ -253,7 +241,7 @@ class Redis
|
|
253
241
|
|
254
242
|
begin
|
255
243
|
yield
|
256
|
-
rescue Errno::ECONNRESET, Errno::EPIPE, Errno::ECONNABORTED
|
244
|
+
rescue Errno::ECONNRESET, Errno::EPIPE, Errno::ECONNABORTED, Errno::EBADF
|
257
245
|
if reconnect
|
258
246
|
yield
|
259
247
|
else
|
@@ -275,10 +263,40 @@ class Redis
|
|
275
263
|
end
|
276
264
|
|
277
265
|
def ensure_connected(&block)
|
278
|
-
super
|
279
|
-
|
266
|
+
synchronize { super }
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
if RUBY_VERSION >= "1.9"
|
271
|
+
require "timeout"
|
272
|
+
|
273
|
+
def with_timeout(seconds, &block)
|
274
|
+
Timeout.timeout(seconds, &block)
|
275
|
+
end
|
276
|
+
else
|
277
|
+
begin
|
278
|
+
require "system_timer"
|
279
|
+
|
280
|
+
def with_timeout(seconds, &block)
|
281
|
+
SystemTimer.timeout_after(seconds, &block)
|
282
|
+
end
|
283
|
+
rescue LoadError
|
284
|
+
$stderr.puts "WARNING: Could not find a good alternative for performing time outs -- connecting to Redis will not time out. Try installing the SystemTimer gem."
|
285
|
+
|
286
|
+
def with_timeout(*args)
|
287
|
+
yield
|
280
288
|
end
|
281
289
|
end
|
282
290
|
end
|
291
|
+
|
292
|
+
if defined?(Encoding)
|
293
|
+
def encode(string)
|
294
|
+
string.force_encoding(Encoding::default_external)
|
295
|
+
end
|
296
|
+
else
|
297
|
+
def encode(string)
|
298
|
+
string
|
299
|
+
end
|
300
|
+
end
|
283
301
|
end
|
284
302
|
end
|
data/lib/redis/url.rb
CHANGED
@@ -21,3 +21,49 @@ module URI
|
|
21
21
|
|
22
22
|
@@schemes["REDIS"] = Redis
|
23
23
|
end
|
24
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
|
25
|
+
require "redis/url"
|
26
|
+
|
27
|
+
class RedisURLTest < Test::Unit::TestCase
|
28
|
+
test "default values" do
|
29
|
+
uri = URI.parse("redis://localhost")
|
30
|
+
|
31
|
+
assert_equal "localhost", uri.host
|
32
|
+
assert_equal 6379, uri.port
|
33
|
+
assert_equal 0, uri.db
|
34
|
+
assert_equal nil, uri.password
|
35
|
+
end
|
36
|
+
|
37
|
+
test "password" do
|
38
|
+
uri = URI.parse("redis://secret@localhost")
|
39
|
+
|
40
|
+
assert_equal "localhost", uri.host
|
41
|
+
assert_equal 6379, uri.port
|
42
|
+
assert_equal 0, uri.db
|
43
|
+
assert_equal "secret", uri.password
|
44
|
+
end
|
45
|
+
|
46
|
+
test "db number" do
|
47
|
+
uri = URI.parse("redis://secret@localhost/15")
|
48
|
+
|
49
|
+
assert_equal "localhost", uri.host
|
50
|
+
assert_equal 6379, uri.port
|
51
|
+
assert_equal 15, uri.db
|
52
|
+
assert_equal "secret", uri.password
|
53
|
+
end
|
54
|
+
|
55
|
+
test "port" do
|
56
|
+
uri = URI.parse("redis://localhost:6380")
|
57
|
+
|
58
|
+
assert_equal "localhost", uri.host
|
59
|
+
assert_equal 6380, uri.port
|
60
|
+
assert_equal 0, uri.db
|
61
|
+
assert_equal nil, uri.password
|
62
|
+
end
|
63
|
+
|
64
|
+
test "to_s" do
|
65
|
+
uri = URI.parse("redis://secret@localhost:6380/15")
|
66
|
+
|
67
|
+
assert_equal "redis://secret@localhost:6380/15", uri.to_s
|
68
|
+
end
|
69
|
+
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 7
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 2
|
7
8
|
- 0
|
8
|
-
-
|
9
|
-
version: 2.0.
|
9
|
+
- 4
|
10
|
+
version: 2.0.4
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Ezra Zygmuntowicz
|
@@ -21,7 +22,7 @@ autorequire: redis
|
|
21
22
|
bindir: bin
|
22
23
|
cert_chain: []
|
23
24
|
|
24
|
-
date: 2010-
|
25
|
+
date: 2010-07-22 00:00:00 -03:00
|
25
26
|
default_executable:
|
26
27
|
dependencies: []
|
27
28
|
|
@@ -59,6 +60,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
59
60
|
requirements:
|
60
61
|
- - ">="
|
61
62
|
- !ruby/object:Gem::Version
|
63
|
+
hash: 3
|
62
64
|
segments:
|
63
65
|
- 0
|
64
66
|
version: "0"
|
@@ -67,6 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
69
|
requirements:
|
68
70
|
- - ">="
|
69
71
|
- !ruby/object:Gem::Version
|
72
|
+
hash: 3
|
70
73
|
segments:
|
71
74
|
- 0
|
72
75
|
version: "0"
|