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.
         |