protocol-redis 0.5.0 → 0.8.0

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: 1be06c92dd3aa593fd22a8e4a437c93d3d74b8cf5308ec7a7721ce48f74d88c5
4
- data.tar.gz: eaa6c565377014ffae9c6bcd20b02437f6c83126da57cd12c4d768e54a320c3a
3
+ metadata.gz: d7392dc8cc474911de91a9b0479ebad6a1406c940bed6c23fd6b35f7eff90959
4
+ data.tar.gz: 8afef4349361c795a119f3560198e71606a2bdda25b6fd9466ab5aef2f52ab8b
5
5
  SHA512:
6
- metadata.gz: 6f473cf7bacd6bc990bd412c544f6911248c1a392412a0c85201b33dd60706e50f4cf6fe84c10f82d6018e3952733491aee1bb0113058201af250979cc6091da
7
- data.tar.gz: 468ddc3e83d7da8165bfebacc1c4860407647c5f8ac66129b0c889742da1da35d97e480cfee2007db172000a685d423840a1fffd81d98a4c9ceb44111486173e
6
+ metadata.gz: ac74be71761f3341f3a76f035636b8e4d2693d40206c74c25858ee02f6eba2aad5013f0928cc467c16858c349ff1903074df878b764bdb7244fb75933428a3f5
7
+ data.tar.gz: 944106d0ef3be643b6efbaa14ab94eb1c2a4c337b54809127a798496d624c440ffc648de0de9bd550b7a998435486e8de9fb5c32372e6e6e4af6f82bf61a6ac6
checksums.yaml.gz.sig ADDED
Binary file
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
22
5
 
23
6
  require_relative 'error'
24
7
 
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2019, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
22
5
 
23
6
  module Protocol
24
7
  module Redis
@@ -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
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
22
5
 
23
6
  module Protocol
24
7
  module Redis
@@ -26,9 +9,10 @@ module Protocol
26
9
  module Connection
27
10
  # Authenticate to the server.
28
11
  # @see https://redis.io/commands/auth
29
- # @param password [String]
30
- def auth(password)
31
- call("AUTH", password)
12
+ # @param username [String] Optional username, if Redis ACLs are used.
13
+ # @param password [String] Required password.
14
+ def auth(*arguments)
15
+ call("AUTH", *arguments)
32
16
  end
33
17
 
34
18
  # Echo the given string.
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
22
5
 
23
6
  module Protocol
24
7
  module Redis
@@ -1,25 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- # Copyright, 2018, by Huba Nagy.
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
5
+ # Copyright, 2021, by Troex Nevelin.
23
6
 
24
7
  require 'date'
25
8
 
@@ -46,10 +29,18 @@ module Protocol
46
29
  # Determine if a key exists. O(1).
47
30
  # @see https://redis.io/commands/exists
48
31
  # @param key [Key]
32
+ # @return [Integer]
49
33
  def exists(key, *keys)
50
34
  call('EXISTS', key, *keys)
51
35
  end
52
36
 
37
+ # Boolean oversion of `exists`
38
+ # @param key [Key]
39
+ # @return [Boolean]
40
+ def exists?(key, *keys)
41
+ exists(key, *keys) > 0
42
+ end
43
+
53
44
  # Set a key's time to live in seconds. O(1).
54
45
  # @see https://redis.io/commands/expire
55
46
  # @param key [Key]
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
22
5
 
23
6
  module Protocol
24
7
  module Redis
@@ -1,24 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2019, by Mikael Henriksson. <http://www.mhenrixon.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
5
+ # Copyright, 2023, by Troex Nevelin.
6
+ # Copyright, 2023, by Nick Burwell.
22
7
 
23
8
  module Protocol
24
9
  module Redis
@@ -27,6 +12,7 @@ module Protocol
27
12
  # Get the number of fields in a hash. O(1).
28
13
  # @see https://redis.io/commands/hlen
29
14
  # @param key [Key]
15
+ # @return [Integer]
30
16
  def hlen(key)
31
17
  call('HLEN', key)
32
18
  end
@@ -34,6 +20,7 @@ module Protocol
34
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.
35
21
  # @see https://redis.io/commands/hset
36
22
  # @param key [Key]
23
+ # @return [Integer] if new field added returns "1" otherwise "0"
37
24
  def hset(key, field, value)
38
25
  call('HSET', key, field, value)
39
26
  end
@@ -43,21 +30,39 @@ module Protocol
43
30
  # @param key [Key]
44
31
  # @param field [String]
45
32
  # @param value [String]
33
+ # @return [Boolean] "true" if new field added, "false" otherwise
46
34
  def hsetnx(key, field, value)
47
- call('HSETNX', key, field, value)
35
+ call('HSETNX', key, field, value) > 0
48
36
  end
49
37
 
50
38
  # Set multiple hash fields to multiple values. O(N) where N is the number of fields being set.
51
39
  # @see https://redis.io/commands/hmset
52
40
  # @param key [Key]
41
+ # @return [String] default: "OK"
53
42
  def hmset(key, *attrs)
54
43
  call('HMSET', key, *attrs)
55
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
56
60
 
57
61
  # Get the value of a hash field. O(1).
58
62
  # @see https://redis.io/commands/hget
59
63
  # @param key [Key]
60
64
  # @param field [String]
65
+ # @return [String, Null]
61
66
  def hget(key, field)
62
67
  call('HGET', key, field)
63
68
  end
@@ -65,15 +70,33 @@ module Protocol
65
70
  # Get the values of all the given hash fields. O(N) where N is the number of fields being requested.
66
71
  # @see https://redis.io/commands/hmget
67
72
  # @param key [Key]
68
- # @param field [String]
69
- def hmget(key, *fields, &blk)
70
- call('HMGET', key, *fields, &blk)
73
+ # @param fields [Array<String>] array of fields
74
+ # @return [Array]
75
+ def hmget(key, *fields)
76
+ call('HMGET', key, *fields)
71
77
  end
72
-
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
+
73
95
  # Delete one or more hash fields. O(N) where N is the number of fields to be removed.
74
96
  # @see https://redis.io/commands/hdel
75
97
  # @param key [Key]
76
98
  # @param field [String]
99
+ # @return [Integer] number of deleted fields
77
100
  def hdel(key, *fields)
78
101
  call('HDEL', key, *fields)
79
102
  end
@@ -82,8 +105,9 @@ module Protocol
82
105
  # @see https://redis.io/commands/hexists
83
106
  # @param key [Key]
84
107
  # @param field [String]
108
+ # @return [Boolean]
85
109
  def hexists(key, field)
86
- call('HEXISTS', key, field)
110
+ call('HEXISTS', key, field) > 0
87
111
  end
88
112
 
89
113
  # Increment the integer value of a hash field by the given number. O(1).
@@ -91,6 +115,7 @@ module Protocol
91
115
  # @param key [Key]
92
116
  # @param field [String]
93
117
  # @param increment [Integer]
118
+ # @return [Integer] field value after increment
94
119
  def hincrby(key, field, increment)
95
120
  call('HINCRBY', key, field, increment)
96
121
  end
@@ -100,13 +125,15 @@ module Protocol
100
125
  # @param key [Key]
101
126
  # @param field [String]
102
127
  # @param increment [Double]
128
+ # @return [Float] field value after increment
103
129
  def hincrbyfloat(key, field, increment)
104
- call('HINCRBYFLOAT', key, field, increment)
130
+ Float(call('HINCRBYFLOAT', key, field, increment))
105
131
  end
106
132
 
107
133
  # Get all the fields in a hash. O(N) where N is the size of the hash.
108
134
  # @see https://redis.io/commands/hkeys
109
135
  # @param key [Key]
136
+ # @return [Array]
110
137
  def hkeys(key)
111
138
  call('HKEYS', key)
112
139
  end
@@ -114,6 +141,7 @@ module Protocol
114
141
  # Get all the values in a hash. O(N) where N is the size of the hash.
115
142
  # @see https://redis.io/commands/hvals
116
143
  # @param key [Key]
144
+ # @return [Array]
117
145
  def hvals(key)
118
146
  call('HVALS', key)
119
147
  end
@@ -121,8 +149,27 @@ module Protocol
121
149
  # Get all the fields and values in a hash. O(N) where N is the size of the hash.
122
150
  # @see https://redis.io/commands/hgetall
123
151
  # @param key [Key]
152
+ # @return [Hash]
124
153
  def hgetall(key)
125
- 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)
126
173
  end
127
174
  end
128
175
  end
@@ -1,25 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- # Copyright, 2018, by Huba Nagy.
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
5
+ # Copyright, 2020, by Salim Semaoune.
23
6
 
24
7
  module Protocol
25
8
  module Redis
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2023, by Samuel Williams.
5
+
6
+ module Protocol
7
+ module Redis
8
+ module Methods
9
+ module Pubsub
10
+ # Post a message to a channel.
11
+ # @see https://redis.io/commands/publish
12
+ # @param channel [String]
13
+ # @param message [String]
14
+ def publish(channel, message)
15
+ call('PUBLISH', channel, message)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,24 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2023, by Samuel Williams.
5
+ # Copyright, 2023, by Nick Burwell.
22
6
 
23
7
  module Protocol
24
8
  module Redis
@@ -28,7 +12,7 @@ module Protocol
28
12
  # @see https://redis.io/commands/eval
29
13
  # @param script [String]
30
14
  # @param numkeys [Integer]
31
- # @param key [Key]
15
+ # @param key [Key] Multiple keys are supported, as long as the same number of values are also provided
32
16
  # @param arg [String]
33
17
  def eval(*arguments)
34
18
  call("EVAL", *arguments)
@@ -44,37 +28,12 @@ module Protocol
44
28
  call("EVALSHA", *arguments)
45
29
  end
46
30
 
47
- # Set the debug mode for executed scripts. O(1).
48
- # @see https://redis.io/commands/script debug
49
- # @param mode [Enum]
50
- def script_debug(*arguments)
51
- call("SCRIPT DEBUG", *arguments)
52
- end
53
-
54
- # Check existence of scripts in the script cache. O(N) with N being the number of scripts to check (so checking a single script is an O(1) operation).
55
- # @see https://redis.io/commands/script exists
56
- # @param sha1 [String]
57
- def script_exists(*arguments)
58
- call("SCRIPT EXISTS", *arguments)
59
- end
60
-
61
- # Remove all the scripts from the script cache. O(N) with N being the number of scripts in cache.
62
- # @see https://redis.io/commands/script flush
63
- def script_flush(*arguments)
64
- call("SCRIPT FLUSH", *arguments)
65
- end
66
-
67
- # Kill the script currently in execution. O(1).
68
- # @see https://redis.io/commands/script kill
69
- def script_kill(*arguments)
70
- call("SCRIPT KILL", *arguments)
71
- end
72
-
73
- # Load the specified Lua script into the script cache. O(N) with N being the length in bytes of the script body.
74
- # @see https://redis.io/commands/script load
75
- # @param script [String]
76
- def script_load(*arguments)
77
- call("SCRIPT LOAD", *arguments)
31
+ # Execute script management commands
32
+ # @see https://redis.io/commands/script/
33
+ # @param subcommand [String] e.g. `debug`, `exists`, `flush`, `load`, `kill`
34
+ # @param [Array<String>] args depends on the subcommand provided
35
+ def script(subcommand, *arguments)
36
+ call("SCRIPT", subcommand.to_s, *arguments)
78
37
  end
79
38
  end
80
39
  end
@@ -1,25 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- # Copyright, 2018, by Huba Nagy.
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
5
+ # Copyright, 2020, by David Ortiz.
23
6
 
24
7
  module Protocol
25
8
  module Redis
@@ -31,7 +14,7 @@ module Protocol
31
14
  def info
32
15
  metadata = {}
33
16
 
34
- call('INFO').each_line(Protocol::CRLF) do |line|
17
+ call('INFO').each_line(Redis::Connection::CRLF) do |line|
35
18
  key, value = line.split(':')
36
19
 
37
20
  if value
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2020-2023, by Samuel Williams.
22
5
 
23
6
  module Protocol
24
7
  module Redis
@@ -1,25 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
3
+ # Released under the MIT License.
4
4
  # Copyright, 2020, by Dimitry Chopey.
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
5
+ # Copyright, 2020-2023, by Samuel Williams.
23
6
 
24
7
  module Protocol
25
8
  module Redis