async-redis 0.3.3 → 0.3.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.
- checksums.yaml +4 -4
- data/async-redis.gemspec +8 -1
- data/lib/async/redis/client.rb +13 -1
- data/lib/async/redis/context/multi.rb +0 -8
- data/lib/async/redis/context/nested.rb +8 -0
- data/lib/async/redis/methods/lists.rb +5 -5
- data/lib/async/redis/protocol/resp.rb +18 -22
- data/lib/async/redis/version.rb +1 -1
- metadata +45 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cf3ca6e7a1400dd30aa057b8688fe5c36dfd259ed6a62e74452e72706026434
|
4
|
+
data.tar.gz: 377bb98eb47f7e21bde259224c2cbc61fa9e960804d6037c4b7e8556d1892bb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ab1e184597d78757881a5a692763e00d0be075480a98600bb2ec87b87484bd17b3840692cd07bdc7d024ab3860b5ed410ae4c618df26a8bb0b8743425a68dff
|
7
|
+
data.tar.gz: b4ce7600597fea36ba4f9e5b6d68db84fe286a259f4946e001a7ebade416989694a5c760eac08285f446b49956b8569402adfa0f7ed9a61189feec61d1e5df30
|
data/async-redis.gemspec
CHANGED
@@ -21,9 +21,16 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency("async-io", "~> 1.10")
|
22
22
|
|
23
23
|
spec.add_development_dependency "async-rspec", "~> 1.1"
|
24
|
-
|
24
|
+
spec.add_development_dependency "redis"
|
25
|
+
spec.add_development_dependency "benchmark-ips"
|
26
|
+
|
25
27
|
spec.add_development_dependency "covered"
|
26
28
|
spec.add_development_dependency "bundler"
|
27
29
|
spec.add_development_dependency "rspec", "~> 3.6"
|
28
30
|
spec.add_development_dependency "rake"
|
31
|
+
|
32
|
+
# Dependencies with C extensions
|
33
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == "ruby"
|
34
|
+
spec.add_development_dependency "hiredis"
|
35
|
+
end
|
29
36
|
end
|
data/lib/async/redis/client.rb
CHANGED
@@ -100,6 +100,18 @@ module Async
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
+
def nested(&block)
|
104
|
+
context = Context::Nested.new(@pool)
|
105
|
+
|
106
|
+
return context unless block_given?
|
107
|
+
|
108
|
+
begin
|
109
|
+
yield context
|
110
|
+
ensure
|
111
|
+
context.close
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
103
115
|
def call(*arguments)
|
104
116
|
@pool.acquire do |connection|
|
105
117
|
connection.write_request(arguments)
|
@@ -113,7 +125,7 @@ module Async
|
|
113
125
|
def connect(connection_limit: nil)
|
114
126
|
Pool.new(connection_limit) do
|
115
127
|
peer = @endpoint.connect
|
116
|
-
|
128
|
+
|
117
129
|
peer.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
118
130
|
|
119
131
|
stream = IO::Stream.new(peer)
|
@@ -21,18 +21,10 @@
|
|
21
21
|
|
22
22
|
require_relative 'nested'
|
23
23
|
|
24
|
-
require_relative '../methods/strings'
|
25
|
-
require_relative '../methods/keys'
|
26
|
-
require_relative '../methods/lists'
|
27
|
-
|
28
24
|
module Async
|
29
25
|
module Redis
|
30
26
|
module Context
|
31
27
|
class Multi < Nested
|
32
|
-
include Methods::Strings
|
33
|
-
include Methods::Keys
|
34
|
-
include Methods::Lists
|
35
|
-
|
36
28
|
def initialize(pool, *args)
|
37
29
|
super(pool)
|
38
30
|
|
@@ -19,10 +19,18 @@
|
|
19
19
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20
20
|
# THE SOFTWARE.
|
21
21
|
|
22
|
+
require_relative '../methods/strings'
|
23
|
+
require_relative '../methods/keys'
|
24
|
+
require_relative '../methods/lists'
|
25
|
+
|
22
26
|
module Async
|
23
27
|
module Redis
|
24
28
|
module Context
|
25
29
|
class Nested
|
30
|
+
include Methods::Strings
|
31
|
+
include Methods::Keys
|
32
|
+
include Methods::Lists
|
33
|
+
|
26
34
|
def initialize(pool, *args)
|
27
35
|
@pool = pool
|
28
36
|
@connection = pool.acquire
|
@@ -23,15 +23,15 @@ module Async
|
|
23
23
|
module Redis
|
24
24
|
module Methods
|
25
25
|
module Lists
|
26
|
-
def blpop(
|
27
|
-
return call('BLPOP', *keys,
|
26
|
+
def blpop(*keys, timeout: 0)
|
27
|
+
return call('BLPOP', *keys, timeout)
|
28
28
|
end
|
29
29
|
|
30
|
-
def brpop(
|
31
|
-
return call('BRPOP', *keys,
|
30
|
+
def brpop(*keys, timeout: 0)
|
31
|
+
return call('BRPOP', *keys, timeout)
|
32
32
|
end
|
33
33
|
|
34
|
-
def brpoplpush(
|
34
|
+
def brpoplpush(source, destination, timeout)
|
35
35
|
return call('BRPOPLPUSH', source, destination, timeout)
|
36
36
|
end
|
37
37
|
|
@@ -67,36 +67,30 @@ module Async
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
#
|
79
|
-
# return result
|
80
|
-
# end
|
70
|
+
def read_data(length)
|
71
|
+
buffer = @stream.read(length) or @stream.eof!
|
72
|
+
|
73
|
+
# Eat trailing whitespace because length does not include the CRLF:
|
74
|
+
@stream.read(2) or @stream.eof!
|
75
|
+
|
76
|
+
return buffer
|
77
|
+
end
|
81
78
|
|
82
79
|
def read_object
|
83
|
-
|
80
|
+
line = read_line
|
81
|
+
token = line.slice!(0, 1)
|
84
82
|
|
85
83
|
case token
|
86
84
|
when '$'
|
87
|
-
length =
|
85
|
+
length = line.to_i
|
88
86
|
|
89
87
|
if length == -1
|
90
88
|
return nil
|
91
89
|
else
|
92
|
-
|
93
|
-
# Eat trailing whitespace because length does not include the CRLF:
|
94
|
-
read_line
|
95
|
-
|
96
|
-
return buffer
|
90
|
+
return read_data(length)
|
97
91
|
end
|
98
92
|
when '*'
|
99
|
-
count =
|
93
|
+
count = line.to_i
|
100
94
|
|
101
95
|
# Null array (https://redis.io/topics/protocol#resp-arrays):
|
102
96
|
return nil if count == -1
|
@@ -105,19 +99,21 @@ module Async
|
|
105
99
|
|
106
100
|
return array
|
107
101
|
when ':'
|
108
|
-
return
|
102
|
+
return line.to_i
|
109
103
|
|
110
104
|
when '-'
|
111
|
-
raise ServerError.new(
|
105
|
+
raise ServerError.new(line)
|
112
106
|
|
113
107
|
when '+'
|
114
|
-
return
|
108
|
+
return line
|
115
109
|
|
116
110
|
else
|
117
111
|
@stream.flush
|
118
112
|
|
119
113
|
raise NotImplementedError, "Implementation for token #{token} missing"
|
120
114
|
end
|
115
|
+
|
116
|
+
# TODO: If an exception (e.g. Async::TimeoutError) propagates out of this function, perhaps @stream should be closed? Otherwise it might be in a weird state.
|
121
117
|
end
|
122
118
|
|
123
119
|
alias read_response read_object
|
data/lib/async/redis/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: async-redis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-05-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: async
|
@@ -53,6 +53,34 @@ dependencies:
|
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '1.1'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: redis
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: benchmark-ips
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
56
84
|
- !ruby/object:Gem::Dependency
|
57
85
|
name: covered
|
58
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,6 +137,20 @@ dependencies:
|
|
109
137
|
- - ">="
|
110
138
|
- !ruby/object:Gem::Version
|
111
139
|
version: '0'
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: hiredis
|
142
|
+
requirement: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
type: :development
|
148
|
+
prerelease: false
|
149
|
+
version_requirements: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
112
154
|
description:
|
113
155
|
email:
|
114
156
|
- samuel.williams@oriontransfer.co.nz
|
@@ -155,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
197
|
- !ruby/object:Gem::Version
|
156
198
|
version: '0'
|
157
199
|
requirements: []
|
158
|
-
rubygems_version: 3.0.
|
200
|
+
rubygems_version: 3.0.3
|
159
201
|
signing_key:
|
160
202
|
specification_version: 4
|
161
203
|
summary: A Redis client library.
|