protocol-redis 0.1.0 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eab7d3758fbb84ad4e85cbeae48dc4a370c5dcab35c6db79cf4ac7d0b4f23e03
4
- data.tar.gz: d052a525167a7f439308f143780d6b4bfe4884b4593fc56b7e4bea6f1caf8598
3
+ metadata.gz: eaec89c45931d2380b65c26b642dc53cc65b0c2b93251c57fa9831fa8aa654a6
4
+ data.tar.gz: 87be2b36ea8deeb9eef4ed56f2e833120a8641fa4256feb0decb4f8ee73b4f64
5
5
  SHA512:
6
- metadata.gz: 5ba96c540da05dc4a029dbaba7599bcc267b4cb94e311f8b5064116fc77a1cb581bcec7bc98bb70c8e624ac277d39b8e9cfedb3b3084ec0b9e5ce677123f2d88
7
- data.tar.gz: af8434897aa46a45c949029dc180c478aeeae818524100da114e09e8fb8b2268914b184c23de9709ea85b1afd1de6bc8e0527c67bdbadf73838510f6738c70bf
6
+ metadata.gz: 9c4bf2da40ab8a0090e08428a26f2bdf1b02c1c210a805945d8ff001c5836d6bc3710e1889cd192f0f862bd17dfeb1a6c83dec2cae55ee407b216a96edfd9666
7
+ data.tar.gz: 4a737e454c0fcdd0c2469f9770caa1e6c4bbe309c2a80a15b5a4937462c5628d175ab59390c075b4d2edd07497ff6bd6947396d0239b11859a89c95fb3962f03
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Protocol::Redis
2
2
 
3
- Implements the RESP2 and future redis protocols.
3
+ Implements the RESP2 and [RESP3](https://github.com/antirez/RESP3) Redis protocols.
4
4
 
5
5
  [![Build Status](https://travis-ci.com/socketry/protocol-redis.svg?branch=master)](https://travis-ci.com/socketry/protocol-redis)
6
6
 
@@ -22,7 +22,16 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- ...
25
+ ```ruby
26
+ sockets = Socket.pair(Socket::PF_UNIX, Socket::SOCK_STREAM)
27
+
28
+ client = Protocol::Redis::Connection.new(sockets.first)
29
+ server = Protocol::Redis::Connection.new(sockets.last)
30
+
31
+ client.write_object("Hello World!")
32
+ puts server.read_object
33
+ # => "Hello World!"
34
+ ```
26
35
 
27
36
  ## Contributing
28
37
 
@@ -19,4 +19,4 @@
19
19
  # THE SOFTWARE.
20
20
 
21
21
  require_relative 'redis/version'
22
- require_relative 'redis/client'
22
+ require_relative 'redis/connection'
@@ -18,7 +18,7 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  # THE SOFTWARE.
20
20
 
21
- require 'async/io/protocol/line'
21
+ require_relative 'error'
22
22
 
23
23
  module Protocol
24
24
  module Redis
@@ -49,7 +49,7 @@ module Protocol
49
49
 
50
50
  # The redis server doesn't want actual objects (e.g. integers) but only bulk strings. So, we inline it for performance.
51
51
  def write_request(arguments)
52
- write_lines("*#{arguments.count}")
52
+ write_lines("*#{arguments.size}")
53
53
 
54
54
  arguments.each do |argument|
55
55
  string = argument.to_s
@@ -81,7 +81,8 @@ module Protocol
81
81
  end
82
82
 
83
83
  def read_object
84
- line = read_line
84
+ line = read_line or raise EOFError
85
+
85
86
  token = line.slice!(0, 1)
86
87
 
87
88
  case token
@@ -0,0 +1,39 @@
1
+ # Copyright, 2019, by Mikael Henriksson. <http://www.mhenrixon.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ require_relative 'methods/hashes'
22
+ require_relative 'methods/keys'
23
+ require_relative 'methods/lists'
24
+ require_relative 'methods/server'
25
+ require_relative 'methods/strings'
26
+
27
+ module Protocol
28
+ module Redis
29
+ module Methods
30
+ def self.included(klass)
31
+ klass.include Methods::Hashes
32
+ klass.include Methods::Keys
33
+ klass.include Methods::Lists
34
+ klass.include Methods::Server
35
+ klass.include Methods::Strings
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,79 @@
1
+ # Copyright, 2019, by Mikael Henriksson. <http://www.mhenrixon.com>
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
21
+ module Protocol
22
+ module Redis
23
+ module Methods
24
+ module Hashes
25
+ def hlen(key)
26
+ return call('HLEN', key)
27
+ end
28
+
29
+ def hset(key, field, value)
30
+ return call('HSET', key, field, value)
31
+ end
32
+
33
+ def hsetnx(key, field, value)
34
+ return call('HSETNX', key, field, value)
35
+ end
36
+
37
+ def hmset(key, *attrs)
38
+ return call('HMSET', key, *attrs)
39
+ end
40
+
41
+ def hget(key, field)
42
+ return call('HGET', key, field)
43
+ end
44
+
45
+ def hmget(key, *fields, &blk)
46
+ return call('HMGET', key, *fields, &blk)
47
+ end
48
+
49
+ def hdel(key, *fields)
50
+ return call('HDEL', key, *fields)
51
+ end
52
+
53
+ def hexists(key, field)
54
+ return call('HEXISTS', key, field)
55
+ end
56
+
57
+ def hincrby(key, field, increment)
58
+ return call('HINCRBY', key, field, increment)
59
+ end
60
+
61
+ def hincrbyfloat(key, field, increment)
62
+ return call('HINCRBYFLOAT', key, field, increment)
63
+ end
64
+
65
+ def hkeys(key)
66
+ return call('HKEYS', key)
67
+ end
68
+
69
+ def hvals(key)
70
+ return call('HVALS', key)
71
+ end
72
+
73
+ def hgetall(key)
74
+ return call('HGETALL', key)
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,140 @@
1
+ # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
+ # Copyright, 2018, by Huba Nagy.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+
22
+ require 'date'
23
+
24
+ module Protocol
25
+ module Redis
26
+ module Methods
27
+ module Keys
28
+ def del(key, *keys)
29
+ return call('DEL', key, *keys)
30
+ end
31
+
32
+ def dump(key)
33
+ return call('DUMP', key)
34
+ end
35
+
36
+ def exists(key, *keys)
37
+ return call('EXISTS', key, *keys)
38
+ end
39
+
40
+ def expire(key, seconds)
41
+ return call('EXPIRE', key, seconds)
42
+ end
43
+
44
+ def expireat(key, time)
45
+ case time
46
+ when DateTime, Time, Date
47
+ timestamp = time.strftime('%s').to_i
48
+ else
49
+ timestamp = time
50
+ end
51
+
52
+ return call('EXPIREAT', key, timestamp)
53
+ end
54
+
55
+ def keys(pattern)
56
+ return call('KEYS', pattern)
57
+ end
58
+
59
+ def migrate
60
+
61
+ end
62
+
63
+ def move(key, db)
64
+ return call('MOVE', key, db)
65
+ end
66
+
67
+ def object
68
+
69
+ end
70
+
71
+ def persist(key)
72
+ return call('PERSIST', key)
73
+ end
74
+
75
+ def pexpire(key, milliseconds)
76
+ return call('PEXPIRE', milliseconds)
77
+ end
78
+
79
+ def pexpireat(key, time)
80
+ case time.class
81
+ when DateTime, Time, Date
82
+ timestamp = time.strftime('%Q').to_i
83
+ else
84
+ timestamp = time
85
+ end
86
+
87
+ return call('PEXPIREAT', key, timestamp)
88
+ end
89
+
90
+ def pttl(key)
91
+ return call('PTTL', key)
92
+ end
93
+
94
+ def randomkey
95
+ return call('RANDOMKEY')
96
+ end
97
+
98
+ def rename(key, new_key)
99
+ return call('RENAME', key, new_key)
100
+ end
101
+
102
+ def renamenx(key, new_key)
103
+ return call('RENAMENX', key, new_key)
104
+ end
105
+
106
+ def restore(key, serialized_value, ttl=0)
107
+ return call('RESTORE', key, ttl, serialized_value)
108
+ end
109
+
110
+ def sort
111
+
112
+ end
113
+
114
+ def touch(key, *keys)
115
+ return call('TOUCH', key, *keys)
116
+ end
117
+
118
+ def ttl(key)
119
+ return call('TTL', key)
120
+ end
121
+
122
+ def type(key)
123
+ return call('TYPE', key)
124
+ end
125
+
126
+ def unlink(key)
127
+ return call('UNLINK', key)
128
+ end
129
+
130
+ def wait(newreplicas, timeout)
131
+
132
+ end
133
+
134
+ def scan
135
+
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,118 @@
1
+ # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
+ # Copyright, 2018, by Huba Nagy.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+
22
+ module Protocol
23
+ module Redis
24
+ module Methods
25
+ module Lists
26
+ def blpop(*keys, timeout: 0)
27
+ return call('BLPOP', *keys, timeout)
28
+ end
29
+
30
+ def brpop(*keys, timeout: 0)
31
+ return call('BRPOP', *keys, timeout)
32
+ end
33
+
34
+ def brpoplpush(source, destination, timeout)
35
+ return call('BRPOPLPUSH', source, destination, timeout)
36
+ end
37
+
38
+ def lindex(key, index)
39
+ return call('LINDEX', key, index)
40
+ end
41
+
42
+ def linsert(key, position=:before, index, value)
43
+ if position == :before
44
+ offset = 'BEFORE'
45
+ else
46
+ offset = 'AFTER'
47
+ end
48
+
49
+ return call('LINSERT', key, offset, index, value)
50
+ end
51
+
52
+ def llen(key)
53
+ return call('LLEN', key)
54
+ end
55
+
56
+ def lpop(key)
57
+ return call('LPOP', key)
58
+ end
59
+
60
+ def lpush(key, value, *values)
61
+ case value
62
+ when Array
63
+ values = value
64
+ else
65
+ values = [value] + values
66
+ end
67
+
68
+ return call('LPUSH', key, *values)
69
+ end
70
+
71
+ def lpushx(key, value)
72
+ return call('LPUSHX', key, value)
73
+ end
74
+
75
+ def lrange(key, start, stop)
76
+ return call('LRANGE', key, start, stop)
77
+ end
78
+
79
+ def lrem(key, count, value)
80
+ return call('LREM', key, count)
81
+ end
82
+
83
+ def lset(key, index, values)
84
+ return call('LSET', key, index, values)
85
+ end
86
+
87
+ def ltrim(key, start, stop)
88
+ return call('LTRIM', key, start, stop)
89
+ end
90
+
91
+ def rpop(key)
92
+ return call('RPOP', key)
93
+ end
94
+
95
+ def rpoplpush(source, destination=nil)
96
+ destination = source if destination.nil?
97
+
98
+ return call('RPOPLPUSH', source, destination)
99
+ end
100
+
101
+ def rpush(key, value, *values)
102
+ case value
103
+ when Array
104
+ values = value
105
+ else
106
+ values = [value] + values
107
+ end
108
+
109
+ return call('RPUSH', key, *values)
110
+ end
111
+
112
+ def rpushx(key, value)
113
+ return call('RPUSHX', key, value)
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,48 @@
1
+ # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
+ # Copyright, 2018, by Huba Nagy.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+
22
+ module Protocol
23
+ module Redis
24
+ module Methods
25
+ module Server
26
+ # Get info from server.
27
+ # @return [Hash] the server metadata.
28
+ def info
29
+ metadata = {}
30
+
31
+ call('INFO').each_line(Protocol::CRLF) do |line|
32
+ key, value = line.split(':')
33
+
34
+ if value
35
+ metadata[key.to_sym] = value.chomp!
36
+ end
37
+ end
38
+
39
+ return metadata
40
+ end
41
+
42
+ def flushdb!
43
+ call 'FLUSHDB'
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,132 @@
1
+ # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
+ # Copyright, 2018, by Huba Nagy.
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ # of this software and associated documentation files (the "Software"), to deal
6
+ # in the Software without restriction, including without limitation the rights
7
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ # copies of the Software, and to permit persons to whom the Software is
9
+ # furnished to do so, subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in
12
+ # all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ # THE SOFTWARE.
21
+
22
+ module Protocol
23
+ module Redis
24
+ module Methods
25
+ module Strings
26
+ def append(key, value)
27
+ return call('APPEND', key, value)
28
+ end
29
+
30
+ def bitcount(key, *range)
31
+ return call('BITCOUNT', key, *range)
32
+ end
33
+
34
+ def decr(key)
35
+ return call('DECR', key)
36
+ end
37
+
38
+ def decrby(key, decrement)
39
+ return call('DECRBY', key, decrement)
40
+ end
41
+
42
+ def get(key)
43
+ return call('GET', key)
44
+ end
45
+
46
+ def getbit(key, offset)
47
+ return call('GETBIT', key, offset)
48
+ end
49
+
50
+ def getrange(key, start_index, end_index)
51
+ return call('GETRANGE', key, start_index, end_index)
52
+ end
53
+
54
+ def getset(key, value)
55
+ return call('GETSET', key, value)
56
+ end
57
+
58
+ def incr(key)
59
+ return call('INCR', key)
60
+ end
61
+
62
+ def incrby(key, increment)
63
+ return call('INCRBY', key, increment)
64
+ end
65
+
66
+ def incrbyfloat(key, increment)
67
+ return call('INCRBYFLOAT', key, increment)
68
+ end
69
+
70
+ def mget(key, *keys)
71
+ return call('MGET', key, *keys)
72
+ end
73
+
74
+ def mset(pairs)
75
+ flattened_pairs = pairs.keys.zip(pairs.values).flatten
76
+ return call('MSET', *flattened_pairs)
77
+ end
78
+
79
+ def msetnx(pairs)
80
+ flattened_pairs = pairs.keys.zip(pairs.values).flatten
81
+ return call('MSETNX', *flattened_pairs)
82
+ end
83
+
84
+ def psetex(key, milliseconds, value)
85
+ return set key, value, milliseconds: milliseconds
86
+ end
87
+
88
+ def set(key, value, **options)
89
+ arguments = []
90
+
91
+ if options.has_key? :seconds
92
+ arguments << 'EX'
93
+ arguments << options[:seconds]
94
+ end
95
+
96
+ if options.has_key? :milliseconds
97
+ arguments << 'PX'
98
+ arguments << options[:milliseconds]
99
+ end
100
+
101
+ if options[:condition] == :nx
102
+ arguments << 'NX'
103
+ elsif options[:condition] == :xx
104
+ arguments << 'XX'
105
+ end
106
+
107
+ return call('SET', key, value, *arguments)
108
+ end
109
+
110
+ def setbit(key, offset, value)
111
+ return call('SETBIT', key, offset, value)
112
+ end
113
+
114
+ def setex(key, seconds, value)
115
+ return set key, value, seconds: seconds
116
+ end
117
+
118
+ def setnx(key, value)
119
+ return set key, value, condition: :nx
120
+ end
121
+
122
+ def setrange(key, offset, value)
123
+ return call('SETRANGE', key, offset, value)
124
+ end
125
+
126
+ def strlen(key)
127
+ return call('STRLEN', key)
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Protocol
22
22
  module Redis
23
- VERSION = "0.1.0"
23
+ VERSION = "0.2.0"
24
24
  end
25
25
  end
@@ -17,7 +17,6 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.require_paths = ["lib"]
19
19
 
20
- spec.add_development_dependency "async-rspec", "~> 1.1"
21
20
  spec.add_development_dependency "benchmark-ips"
22
21
 
23
22
  spec.add_development_dependency "covered"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protocol-redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -9,22 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-07-10 00:00:00.000000000 Z
12
+ date: 2019-08-16 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: async-rspec
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - "~>"
19
- - !ruby/object:Gem::Version
20
- version: '1.1'
21
- type: :development
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - "~>"
26
- - !ruby/object:Gem::Version
27
- version: '1.1'
28
14
  - !ruby/object:Gem::Dependency
29
15
  name: benchmark-ips
30
16
  requirement: !ruby/object:Gem::Requirement
@@ -113,6 +99,12 @@ files:
113
99
  - lib/protocol/redis.rb
114
100
  - lib/protocol/redis/connection.rb
115
101
  - lib/protocol/redis/error.rb
102
+ - lib/protocol/redis/methods.rb
103
+ - lib/protocol/redis/methods/hashes.rb
104
+ - lib/protocol/redis/methods/keys.rb
105
+ - lib/protocol/redis/methods/lists.rb
106
+ - lib/protocol/redis/methods/server.rb
107
+ - lib/protocol/redis/methods/strings.rb
116
108
  - lib/protocol/redis/version.rb
117
109
  - protocol-redis.gemspec
118
110
  homepage: https://github.com/socketry/protocol-redis