valkey-rb 1.0.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.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +58 -0
  3. data/.rubocop_todo.yml +22 -0
  4. data/README.md +95 -0
  5. data/Rakefile +23 -0
  6. data/lib/valkey/bindings.rb +224 -0
  7. data/lib/valkey/commands/bitmap_commands.rb +86 -0
  8. data/lib/valkey/commands/cluster_commands.rb +259 -0
  9. data/lib/valkey/commands/connection_commands.rb +318 -0
  10. data/lib/valkey/commands/function_commands.rb +255 -0
  11. data/lib/valkey/commands/generic_commands.rb +525 -0
  12. data/lib/valkey/commands/geo_commands.rb +87 -0
  13. data/lib/valkey/commands/hash_commands.rb +587 -0
  14. data/lib/valkey/commands/hyper_log_log_commands.rb +51 -0
  15. data/lib/valkey/commands/json_commands.rb +389 -0
  16. data/lib/valkey/commands/list_commands.rb +348 -0
  17. data/lib/valkey/commands/module_commands.rb +125 -0
  18. data/lib/valkey/commands/pubsub_commands.rb +237 -0
  19. data/lib/valkey/commands/scripting_commands.rb +286 -0
  20. data/lib/valkey/commands/server_commands.rb +961 -0
  21. data/lib/valkey/commands/set_commands.rb +220 -0
  22. data/lib/valkey/commands/sorted_set_commands.rb +971 -0
  23. data/lib/valkey/commands/stream_commands.rb +636 -0
  24. data/lib/valkey/commands/string_commands.rb +359 -0
  25. data/lib/valkey/commands/transaction_commands.rb +175 -0
  26. data/lib/valkey/commands/vector_search_commands.rb +271 -0
  27. data/lib/valkey/commands.rb +68 -0
  28. data/lib/valkey/errors.rb +41 -0
  29. data/lib/valkey/libglide_ffi.so +0 -0
  30. data/lib/valkey/opentelemetry.rb +207 -0
  31. data/lib/valkey/pipeline.rb +20 -0
  32. data/lib/valkey/protobuf/command_request_pb.rb +51 -0
  33. data/lib/valkey/protobuf/connection_request_pb.rb +51 -0
  34. data/lib/valkey/protobuf/response_pb.rb +39 -0
  35. data/lib/valkey/pubsub_callback.rb +10 -0
  36. data/lib/valkey/request_error_type.rb +10 -0
  37. data/lib/valkey/request_type.rb +436 -0
  38. data/lib/valkey/response_type.rb +20 -0
  39. data/lib/valkey/utils.rb +253 -0
  40. data/lib/valkey/version.rb +5 -0
  41. data/lib/valkey.rb +551 -0
  42. metadata +119 -0
@@ -0,0 +1,220 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Valkey
4
+ module Commands
5
+ # this module contains commands related to set data type.
6
+ #
7
+ # @see https://valkey.io/commands/#set
8
+ #
9
+ module SetCommands
10
+ # Get the number of members in a set.
11
+ #
12
+ # @param [String] key
13
+ # @return [Integer]
14
+ def scard(key)
15
+ send_command(RequestType::SCARD, [key])
16
+ end
17
+
18
+ # Add one or more members to a set.
19
+ #
20
+ # @param [String] key
21
+ # @param [String, Array<String>] member one member, or array of members
22
+ # @return [Integer] The number of members that were successfully added
23
+ def sadd(key, *members)
24
+ members.flatten!(1)
25
+ send_command(RequestType::SADD, [key].concat(members))
26
+ end
27
+
28
+ # Add one or more members to a set.
29
+ #
30
+ # @param [String] key
31
+ # @param [String, Array<String>] member one member, or array of members
32
+ # @return [Boolean] Whether at least one member was successfully added.
33
+ def sadd?(key, *members)
34
+ members.flatten!(1)
35
+ send_command(RequestType::SADD, [key].concat(members), &Utils::Boolify)
36
+ end
37
+
38
+ # Remove one or more members from a set.
39
+ #
40
+ # @param [String] key
41
+ # @param [String, Array<String>] member one member, or array of members
42
+ # @return [Integer] The number of members that were successfully removed
43
+ def srem(key, *members)
44
+ members.flatten!(1)
45
+ send_command(RequestType::S_REM, [key].concat(members))
46
+ end
47
+
48
+ # Remove one or more members from a set.
49
+ #
50
+ # @param [String] key
51
+ # @param [String, Array<String>] member one member, or array of members
52
+ # @return [Boolean] Whether at least one member was successfully removed.
53
+ def srem?(key, *members)
54
+ members.flatten!(1)
55
+ send_command(RequestType::S_REM, [key].concat(members), &Utils::Boolify)
56
+ end
57
+
58
+ # Remove and return one or more random member from a set.
59
+ #
60
+ # @param [String] key
61
+ # @param [Integer] count
62
+ # @return [String]
63
+ def spop(key, count = nil)
64
+ if count.nil?
65
+ send_command(RequestType::S_POP, [key])
66
+ else
67
+ send_command(RequestType::S_POP, [key, Integer(count)])
68
+ end
69
+ end
70
+
71
+ # Get one or more random members from a set.
72
+ #
73
+ # @param [String] key
74
+ # @param [Integer] count
75
+ # @return [String]
76
+ def srandmember(key, count = nil)
77
+ if count.nil?
78
+ send_command(RequestType::S_RAND_MEMBER, [key])
79
+ else
80
+ send_command(RequestType::S_RAND_MEMBER, [key, count])
81
+ end
82
+ end
83
+
84
+ # Move a member from one set to another.
85
+ #
86
+ # @param [String] source source key
87
+ # @param [String] destination destination key
88
+ # @param [String] member member to move from `source` to `destination`
89
+ # @return [Boolean]
90
+ def smove(source, destination, member)
91
+ send_command(RequestType::S_MOVE, [source, destination, member])
92
+ end
93
+
94
+ # Determine if a given value is a member of a set.
95
+ #
96
+ # @param [String] key
97
+ # @param [String] member
98
+ # @return [Boolean]
99
+ def sismember(key, member)
100
+ send_command(RequestType::SISMEMBER, [key, member])
101
+ end
102
+
103
+ # Determine if multiple values are members of a set.
104
+ #
105
+ # @param [String] key
106
+ # @param [String, Array<String>] members
107
+ # @return [Array<Boolean>]
108
+ def smismember(key, *members)
109
+ members.flatten!(1)
110
+ send_command(RequestType::SMISMEMBER, [key].concat(members))
111
+ end
112
+
113
+ # Get all the members in a set.
114
+ #
115
+ # @param [String] key
116
+ # @return [Array<String>]
117
+ def smembers(key)
118
+ send_command(RequestType::SMEMBERS, [key])
119
+ end
120
+
121
+ # Subtract multiple sets.
122
+ #
123
+ # @param [String, Array<String>] keys keys pointing to sets to subtract
124
+ # @return [Array<String>] members in the difference
125
+ def sdiff(*keys)
126
+ keys.flatten!(1)
127
+ send_command(RequestType::SDIFF, keys)
128
+ end
129
+
130
+ # Subtract multiple sets and store the resulting set in a key.
131
+ #
132
+ # @param [String] destination destination key
133
+ # @param [String, Array<String>] keys keys pointing to sets to subtract
134
+ # @return [Integer] number of elements in the resulting set
135
+ def sdiffstore(destination, *keys)
136
+ keys.flatten!(1)
137
+ send_command(RequestType::SDIFF_STORE, [destination].concat(keys))
138
+ end
139
+
140
+ # Intersect multiple sets.
141
+ #
142
+ # @param [String, Array<String>] keys keys pointing to sets to intersect
143
+ # @return [Array<String>] members in the intersection
144
+ def sinter(*keys)
145
+ keys.flatten!(1)
146
+ send_command(RequestType::SINTER, keys)
147
+ end
148
+
149
+ # Intersect multiple sets and store the resulting set in a key.
150
+ #
151
+ # @param [String] destination destination key
152
+ # @param [String, Array<String>] keys keys pointing to sets to intersect
153
+ # @return [Integer] number of elements in the resulting set
154
+ def sinterstore(destination, *keys)
155
+ keys.flatten!(1)
156
+ send_command(RequestType::SINTER_STORE, [destination].concat(keys))
157
+ end
158
+
159
+ # Add multiple sets.
160
+ #
161
+ # @param [String, Array<String>] keys keys pointing to sets to unify
162
+ # @return [Array<String>] members in the union
163
+ def sunion(*keys)
164
+ keys.flatten!(1)
165
+ send_command(RequestType::S_UNION, keys)
166
+ end
167
+
168
+ # Add multiple sets and store the resulting set in a key.
169
+ #
170
+ # @param [String] destination destination key
171
+ # @param [String, Array<String>] keys keys pointing to sets to unify
172
+ # @return [Integer] number of elements in the resulting set
173
+ def sunionstore(destination, *keys)
174
+ keys.flatten!(1)
175
+ send_command(RequestType::S_UNION_STORE, [destination].concat(keys))
176
+ end
177
+
178
+ # Scan a set
179
+ #
180
+ # @example Retrieve the first batch of keys in a set
181
+ # valkey.sscan("set", 0)
182
+ #
183
+ # @param [String, Integer] cursor the cursor of the iteration
184
+ # @param [Hash] options
185
+ # - `:match => String`: only return keys matching the pattern
186
+ # - `:count => Integer`: return count keys at most per iteration
187
+ #
188
+ # @return [String, Array<String>] the next cursor and all found members
189
+ #
190
+ # See the [Valkey Server SSCAN documentation](https://valkey.io/commands/sscan/) for further details
191
+ def sscan(key, cursor, **options)
192
+ _scan(RequestType::S_SCAN, cursor, [key], **options)
193
+ end
194
+
195
+ # Scan a set
196
+ #
197
+ # @example Retrieve all of the keys in a set
198
+ # valkey.sscan_each("set").to_a
199
+ # # => ["key1", "key2", "key3"]
200
+ #
201
+ # @param [Hash] options
202
+ # - `:match => String`: only return keys matching the pattern
203
+ # - `:count => Integer`: return count keys at most per iteration
204
+ #
205
+ # @return [Enumerator] an enumerator for all keys in the set
206
+ #
207
+ # See the [Valkey Server SSCAN documentation](https://valkey.io/commands/sscan/) for further details
208
+ def sscan_each(key, **options, &block)
209
+ return to_enum(:sscan_each, key, **options) unless block_given?
210
+
211
+ cursor = 0
212
+ loop do
213
+ cursor, keys = sscan(key, cursor, **options)
214
+ keys.each(&block)
215
+ break if cursor == "0"
216
+ end
217
+ end
218
+ end
219
+ end
220
+ end