protocol-redis 0.7.0 → 0.8.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/protocol/redis/methods/cluster.rb +30 -0
- data/lib/protocol/redis/methods/hashes.rb +72 -8
- data/lib/protocol/redis/methods.rb +2 -0
- data/lib/protocol/redis/version.rb +1 -1
- data/license.md +1 -1
- data/readme.md +6 -0
- data.tar.gz.sig +0 -0
- metadata +8 -133
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7392dc8cc474911de91a9b0479ebad6a1406c940bed6c23fd6b35f7eff90959
|
4
|
+
data.tar.gz: 8afef4349361c795a119f3560198e71606a2bdda25b6fd9466ab5aef2f52ab8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ac74be71761f3341f3a76f035636b8e4d2693d40206c74c25858ee02f6eba2aad5013f0928cc467c16858c349ff1903074df878b764bdb7244fb75933428a3f5
|
7
|
+
data.tar.gz: 944106d0ef3be643b6efbaa14ab94eb1c2a4c337b54809127a798496d624c440ffc648de0de9bd550b7a998435486e8de9fb5c32372e6e6e4af6f82bf61a6ac6
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Released under the MIT License.
|
4
|
+
# Copyright, 2023, by Nick Burwell.
|
5
|
+
|
6
|
+
module Protocol
|
7
|
+
module Redis
|
8
|
+
module Methods
|
9
|
+
module Cluster
|
10
|
+
# Sends the `CLUSTER *` command to random node and returns its reply.
|
11
|
+
# @see https://redis.io/commands/cluster-addslots/
|
12
|
+
# @param subcommand [String, Symbol] the subcommand of cluster command
|
13
|
+
# e.g. `:addslots`, `:delslots`, `:nodes`, `:replicas`, `:info`
|
14
|
+
#
|
15
|
+
# @return [Object] depends on the subcommand provided
|
16
|
+
def cluster(subcommand, *args)
|
17
|
+
call("CLUSTER", subcommand.to_s, *args)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Sends `ASKING` command to random node and returns its reply.
|
21
|
+
# @see https://redis.io/commands/asking/
|
22
|
+
#
|
23
|
+
# @return [String] `'OK'`
|
24
|
+
def asking
|
25
|
+
call("ASKING")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
# Released under the MIT License.
|
4
4
|
# Copyright, 2019-2023, by Samuel Williams.
|
5
|
+
# Copyright, 2023, by Troex Nevelin.
|
6
|
+
# Copyright, 2023, by Nick Burwell.
|
5
7
|
|
6
8
|
module Protocol
|
7
9
|
module Redis
|
@@ -10,6 +12,7 @@ module Protocol
|
|
10
12
|
# Get the number of fields in a hash. O(1).
|
11
13
|
# @see https://redis.io/commands/hlen
|
12
14
|
# @param key [Key]
|
15
|
+
# @return [Integer]
|
13
16
|
def hlen(key)
|
14
17
|
call('HLEN', key)
|
15
18
|
end
|
@@ -17,6 +20,7 @@ module Protocol
|
|
17
20
|
# Set the string value of a hash field. O(1) for each field/value pair added, so O(N) to add N field/value pairs when the command is called with multiple field/value pairs.
|
18
21
|
# @see https://redis.io/commands/hset
|
19
22
|
# @param key [Key]
|
23
|
+
# @return [Integer] if new field added returns "1" otherwise "0"
|
20
24
|
def hset(key, field, value)
|
21
25
|
call('HSET', key, field, value)
|
22
26
|
end
|
@@ -26,21 +30,39 @@ module Protocol
|
|
26
30
|
# @param key [Key]
|
27
31
|
# @param field [String]
|
28
32
|
# @param value [String]
|
33
|
+
# @return [Boolean] "true" if new field added, "false" otherwise
|
29
34
|
def hsetnx(key, field, value)
|
30
|
-
call('HSETNX', key, field, value)
|
35
|
+
call('HSETNX', key, field, value) > 0
|
31
36
|
end
|
32
37
|
|
33
38
|
# Set multiple hash fields to multiple values. O(N) where N is the number of fields being set.
|
34
39
|
# @see https://redis.io/commands/hmset
|
35
40
|
# @param key [Key]
|
41
|
+
# @return [String] default: "OK"
|
36
42
|
def hmset(key, *attrs)
|
37
43
|
call('HMSET', key, *attrs)
|
38
44
|
end
|
45
|
+
|
46
|
+
# Set multiple hash fields to multiple values, by providing a hash
|
47
|
+
#
|
48
|
+
# @example
|
49
|
+
# redis.mapped_hmset("hash", { "f1" => "v1", "f2" => "v2" })
|
50
|
+
# # => "OK"
|
51
|
+
#
|
52
|
+
# @param key [Key]
|
53
|
+
# @param hash [Hash] a non-empty hash with fields mapping to values
|
54
|
+
# @return [String] default: "OK"
|
55
|
+
#
|
56
|
+
# @see #hmset
|
57
|
+
def mapped_hmset(key, hash)
|
58
|
+
hmset(key, *hash.flatten)
|
59
|
+
end
|
39
60
|
|
40
61
|
# Get the value of a hash field. O(1).
|
41
62
|
# @see https://redis.io/commands/hget
|
42
63
|
# @param key [Key]
|
43
64
|
# @param field [String]
|
65
|
+
# @return [String, Null]
|
44
66
|
def hget(key, field)
|
45
67
|
call('HGET', key, field)
|
46
68
|
end
|
@@ -48,15 +70,33 @@ module Protocol
|
|
48
70
|
# Get the values of all the given hash fields. O(N) where N is the number of fields being requested.
|
49
71
|
# @see https://redis.io/commands/hmget
|
50
72
|
# @param key [Key]
|
51
|
-
# @param
|
52
|
-
|
53
|
-
|
73
|
+
# @param fields [Array<String>] array of fields
|
74
|
+
# @return [Array]
|
75
|
+
def hmget(key, *fields)
|
76
|
+
call('HMGET', key, *fields)
|
54
77
|
end
|
55
|
-
|
78
|
+
|
79
|
+
# Get the values of all the given hash fields and return as array
|
80
|
+
#
|
81
|
+
# @example
|
82
|
+
# redis.mapped_hmget("hash", "f1", "f2")
|
83
|
+
# # => { "f1" => "v1", "f2" => "v2" }
|
84
|
+
#
|
85
|
+
# @param key [Key]
|
86
|
+
# @param fields [Array<String>] array of fields
|
87
|
+
# @return [Hash] a hash mapping the specified fields to their values
|
88
|
+
#
|
89
|
+
# @see #hmget
|
90
|
+
def mapped_hmget(key, *fields)
|
91
|
+
reply = hmget(key, *fields)
|
92
|
+
Hash[fields.zip(reply)]
|
93
|
+
end
|
94
|
+
|
56
95
|
# Delete one or more hash fields. O(N) where N is the number of fields to be removed.
|
57
96
|
# @see https://redis.io/commands/hdel
|
58
97
|
# @param key [Key]
|
59
98
|
# @param field [String]
|
99
|
+
# @return [Integer] number of deleted fields
|
60
100
|
def hdel(key, *fields)
|
61
101
|
call('HDEL', key, *fields)
|
62
102
|
end
|
@@ -65,8 +105,9 @@ module Protocol
|
|
65
105
|
# @see https://redis.io/commands/hexists
|
66
106
|
# @param key [Key]
|
67
107
|
# @param field [String]
|
108
|
+
# @return [Boolean]
|
68
109
|
def hexists(key, field)
|
69
|
-
call('HEXISTS', key, field)
|
110
|
+
call('HEXISTS', key, field) > 0
|
70
111
|
end
|
71
112
|
|
72
113
|
# Increment the integer value of a hash field by the given number. O(1).
|
@@ -74,6 +115,7 @@ module Protocol
|
|
74
115
|
# @param key [Key]
|
75
116
|
# @param field [String]
|
76
117
|
# @param increment [Integer]
|
118
|
+
# @return [Integer] field value after increment
|
77
119
|
def hincrby(key, field, increment)
|
78
120
|
call('HINCRBY', key, field, increment)
|
79
121
|
end
|
@@ -83,13 +125,15 @@ module Protocol
|
|
83
125
|
# @param key [Key]
|
84
126
|
# @param field [String]
|
85
127
|
# @param increment [Double]
|
128
|
+
# @return [Float] field value after increment
|
86
129
|
def hincrbyfloat(key, field, increment)
|
87
|
-
call('HINCRBYFLOAT', key, field, increment)
|
130
|
+
Float(call('HINCRBYFLOAT', key, field, increment))
|
88
131
|
end
|
89
132
|
|
90
133
|
# Get all the fields in a hash. O(N) where N is the size of the hash.
|
91
134
|
# @see https://redis.io/commands/hkeys
|
92
135
|
# @param key [Key]
|
136
|
+
# @return [Array]
|
93
137
|
def hkeys(key)
|
94
138
|
call('HKEYS', key)
|
95
139
|
end
|
@@ -97,6 +141,7 @@ module Protocol
|
|
97
141
|
# Get all the values in a hash. O(N) where N is the size of the hash.
|
98
142
|
# @see https://redis.io/commands/hvals
|
99
143
|
# @param key [Key]
|
144
|
+
# @return [Array]
|
100
145
|
def hvals(key)
|
101
146
|
call('HVALS', key)
|
102
147
|
end
|
@@ -104,8 +149,27 @@ module Protocol
|
|
104
149
|
# Get all the fields and values in a hash. O(N) where N is the size of the hash.
|
105
150
|
# @see https://redis.io/commands/hgetall
|
106
151
|
# @param key [Key]
|
152
|
+
# @return [Hash]
|
107
153
|
def hgetall(key)
|
108
|
-
call('HGETALL', key)
|
154
|
+
call('HGETALL', key).each_slice(2).to_h
|
155
|
+
end
|
156
|
+
|
157
|
+
# Iterates fields of Hash types and their associated values. O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection.
|
158
|
+
# @see https://redis.io/commands/hscan/
|
159
|
+
# @param cursor [Cursor]
|
160
|
+
# @return [Hash]
|
161
|
+
def hscan(cursor, match: nil, count: nil)
|
162
|
+
arguments = [cursor]
|
163
|
+
|
164
|
+
if match
|
165
|
+
arguments.append("MATCH", match)
|
166
|
+
end
|
167
|
+
|
168
|
+
if count
|
169
|
+
arguments.append("COUNT", count)
|
170
|
+
end
|
171
|
+
|
172
|
+
call("HSCAN", *arguments)
|
109
173
|
end
|
110
174
|
end
|
111
175
|
end
|
@@ -9,6 +9,7 @@
|
|
9
9
|
require_relative 'methods/generic'
|
10
10
|
require_relative 'methods/connection'
|
11
11
|
require_relative 'methods/server'
|
12
|
+
require_relative 'methods/cluster'
|
12
13
|
require_relative 'methods/geospatial'
|
13
14
|
|
14
15
|
require_relative 'methods/counting'
|
@@ -30,6 +31,7 @@ module Protocol
|
|
30
31
|
klass.include Methods::Generic
|
31
32
|
klass.include Methods::Connection
|
32
33
|
klass.include Methods::Server
|
34
|
+
klass.include Methods::Cluster
|
33
35
|
klass.include Methods::Geospatial
|
34
36
|
|
35
37
|
klass.include Methods::Counting
|
data/license.md
CHANGED
@@ -6,7 +6,7 @@ Copyright, 2020, by Salim Semaoune.
|
|
6
6
|
Copyright, 2020, by Dimitry Chopey.
|
7
7
|
Copyright, 2020, by Nakul Warrier.
|
8
8
|
Copyright, 2020, by David Ortiz.
|
9
|
-
Copyright, 2021, by Troex Nevelin.
|
9
|
+
Copyright, 2021-2023, by Troex Nevelin.
|
10
10
|
Copyright, 2021, by Daniel Evans.
|
11
11
|
Copyright, 2023, by Nick Burwell.
|
12
12
|
|
data/readme.md
CHANGED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protocol-redis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
- Dimitry Chopey
|
9
|
+
- Nick Burwell
|
9
10
|
- David Ortiz
|
10
11
|
- Nakul Warrier
|
12
|
+
- Troex Nevelin
|
11
13
|
- Daniel Evans
|
12
|
-
- Nick Burwell
|
13
14
|
- Olle Jonsson
|
14
15
|
- Salim Semaoune
|
15
|
-
- Troex Nevelin
|
16
16
|
autorequire:
|
17
17
|
bindir: bin
|
18
18
|
cert_chain:
|
@@ -45,134 +45,8 @@ cert_chain:
|
|
45
45
|
Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
|
46
46
|
voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
|
47
47
|
-----END CERTIFICATE-----
|
48
|
-
date: 2023-06-
|
49
|
-
dependencies:
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: async-http
|
52
|
-
requirement: !ruby/object:Gem::Requirement
|
53
|
-
requirements:
|
54
|
-
- - ">="
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '0'
|
57
|
-
type: :development
|
58
|
-
prerelease: false
|
59
|
-
version_requirements: !ruby/object:Gem::Requirement
|
60
|
-
requirements:
|
61
|
-
- - ">="
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '0'
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
|
-
name: bake
|
66
|
-
requirement: !ruby/object:Gem::Requirement
|
67
|
-
requirements:
|
68
|
-
- - ">="
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '0'
|
71
|
-
type: :development
|
72
|
-
prerelease: false
|
73
|
-
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
requirements:
|
75
|
-
- - ">="
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: bake-bundler
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
requirements:
|
82
|
-
- - ">="
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
version: '0'
|
85
|
-
type: :development
|
86
|
-
prerelease: false
|
87
|
-
version_requirements: !ruby/object:Gem::Requirement
|
88
|
-
requirements:
|
89
|
-
- - ">="
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
version: '0'
|
92
|
-
- !ruby/object:Gem::Dependency
|
93
|
-
name: bake-modernize
|
94
|
-
requirement: !ruby/object:Gem::Requirement
|
95
|
-
requirements:
|
96
|
-
- - ">="
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
version: '0'
|
99
|
-
type: :development
|
100
|
-
prerelease: false
|
101
|
-
version_requirements: !ruby/object:Gem::Requirement
|
102
|
-
requirements:
|
103
|
-
- - ">="
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: '0'
|
106
|
-
- !ruby/object:Gem::Dependency
|
107
|
-
name: benchmark-ips
|
108
|
-
requirement: !ruby/object:Gem::Requirement
|
109
|
-
requirements:
|
110
|
-
- - ">="
|
111
|
-
- !ruby/object:Gem::Version
|
112
|
-
version: '0'
|
113
|
-
type: :development
|
114
|
-
prerelease: false
|
115
|
-
version_requirements: !ruby/object:Gem::Requirement
|
116
|
-
requirements:
|
117
|
-
- - ">="
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: '0'
|
120
|
-
- !ruby/object:Gem::Dependency
|
121
|
-
name: bundler
|
122
|
-
requirement: !ruby/object:Gem::Requirement
|
123
|
-
requirements:
|
124
|
-
- - ">="
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
version: '0'
|
127
|
-
type: :development
|
128
|
-
prerelease: false
|
129
|
-
version_requirements: !ruby/object:Gem::Requirement
|
130
|
-
requirements:
|
131
|
-
- - ">="
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '0'
|
134
|
-
- !ruby/object:Gem::Dependency
|
135
|
-
name: covered
|
136
|
-
requirement: !ruby/object:Gem::Requirement
|
137
|
-
requirements:
|
138
|
-
- - ">="
|
139
|
-
- !ruby/object:Gem::Version
|
140
|
-
version: '0'
|
141
|
-
type: :development
|
142
|
-
prerelease: false
|
143
|
-
version_requirements: !ruby/object:Gem::Requirement
|
144
|
-
requirements:
|
145
|
-
- - ">="
|
146
|
-
- !ruby/object:Gem::Version
|
147
|
-
version: '0'
|
148
|
-
- !ruby/object:Gem::Dependency
|
149
|
-
name: sus
|
150
|
-
requirement: !ruby/object:Gem::Requirement
|
151
|
-
requirements:
|
152
|
-
- - ">="
|
153
|
-
- !ruby/object:Gem::Version
|
154
|
-
version: '0'
|
155
|
-
type: :development
|
156
|
-
prerelease: false
|
157
|
-
version_requirements: !ruby/object:Gem::Requirement
|
158
|
-
requirements:
|
159
|
-
- - ">="
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
version: '0'
|
162
|
-
- !ruby/object:Gem::Dependency
|
163
|
-
name: trenni
|
164
|
-
requirement: !ruby/object:Gem::Requirement
|
165
|
-
requirements:
|
166
|
-
- - ">="
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
version: '0'
|
169
|
-
type: :development
|
170
|
-
prerelease: false
|
171
|
-
version_requirements: !ruby/object:Gem::Requirement
|
172
|
-
requirements:
|
173
|
-
- - ">="
|
174
|
-
- !ruby/object:Gem::Version
|
175
|
-
version: '0'
|
48
|
+
date: 2023-06-13 00:00:00.000000000 Z
|
49
|
+
dependencies: []
|
176
50
|
description:
|
177
51
|
email:
|
178
52
|
executables: []
|
@@ -183,6 +57,7 @@ files:
|
|
183
57
|
- lib/protocol/redis/connection.rb
|
184
58
|
- lib/protocol/redis/error.rb
|
185
59
|
- lib/protocol/redis/methods.rb
|
60
|
+
- lib/protocol/redis/methods/cluster.rb
|
186
61
|
- lib/protocol/redis/methods/connection.rb
|
187
62
|
- lib/protocol/redis/methods/counting.rb
|
188
63
|
- lib/protocol/redis/methods/generic.rb
|
@@ -212,14 +87,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
212
87
|
requirements:
|
213
88
|
- - ">="
|
214
89
|
- !ruby/object:Gem::Version
|
215
|
-
version: '2.
|
90
|
+
version: '2.7'
|
216
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
217
92
|
requirements:
|
218
93
|
- - ">="
|
219
94
|
- !ruby/object:Gem::Version
|
220
95
|
version: '0'
|
221
96
|
requirements: []
|
222
|
-
rubygems_version: 3.
|
97
|
+
rubygems_version: 3.2.33
|
223
98
|
signing_key:
|
224
99
|
specification_version: 4
|
225
100
|
summary: A transport agnostic RESP protocol client/server.
|
metadata.gz.sig
CHANGED
Binary file
|