async-redis 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4908d7f5eef4279d5be275a46c17feb0d453f4c6bbc6e2cfa026eef027e518cc
4
- data.tar.gz: 2dc99ed8cc6b160656b370a413118083787808104097382a7eac4e50b6cbb1be
3
+ metadata.gz: 4cf3ca6e7a1400dd30aa057b8688fe5c36dfd259ed6a62e74452e72706026434
4
+ data.tar.gz: 377bb98eb47f7e21bde259224c2cbc61fa9e960804d6037c4b7e8556d1892bb1
5
5
  SHA512:
6
- metadata.gz: 81bb8852f240c15d49670753acd9a1edba37911fd51c1594431e977d5e6b9bf8c31599523a5ce5a7c925b3674db5788bc2e764b0261ba43c07de67bf41822878
7
- data.tar.gz: 2eb751bbc41d0a043139f19a33b031e3f40de3915f8e8c82b1e3cae3edab409689aaab0b73714a75fa96bfadb566bbfd1138478faf034c7e31fc5f3404877cb7
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
@@ -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(ttl=0, *keys)
27
- return call('BLPOP', *keys, ttl)
26
+ def blpop(*keys, timeout: 0)
27
+ return call('BLPOP', *keys, timeout)
28
28
  end
29
29
 
30
- def brpop(ttl=0, *keys)
31
- return call('BRPOP', *keys, ttl)
30
+ def brpop(*keys, timeout: 0)
31
+ return call('BRPOP', *keys, timeout)
32
32
  end
33
33
 
34
- def brpoplpush(sorce, destination, timeout)
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
- # def write_lines(*args)
71
- # puts "write_lines(#{args.inspect})"
72
- # super
73
- # end
74
- #
75
- # def read_line
76
- # result = super
77
- # puts "read_line #{result}"
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
- token = @stream.read(1)
80
+ line = read_line
81
+ token = line.slice!(0, 1)
84
82
 
85
83
  case token
86
84
  when '$'
87
- length = read_line.to_i
85
+ length = line.to_i
88
86
 
89
87
  if length == -1
90
88
  return nil
91
89
  else
92
- buffer = @stream.read(length)
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 = read_line.to_i
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 read_line.to_i
102
+ return line.to_i
109
103
 
110
104
  when '-'
111
- raise ServerError.new(read_line)
105
+ raise ServerError.new(line)
112
106
 
113
107
  when '+'
114
- return read_line
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
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Async
22
22
  module Redis
23
- VERSION = "0.3.3"
23
+ VERSION = "0.3.4"
24
24
  end
25
25
  end
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.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-02-28 00:00:00.000000000 Z
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.2
200
+ rubygems_version: 3.0.3
159
201
  signing_key:
160
202
  specification_version: 4
161
203
  summary: A Redis client library.