mock_redis 0.53.0 → 0.54.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: bc774e7b8052b25ca3ca059f197038b854da5cd7d82cae73d5b786cd94fdd318
4
- data.tar.gz: 674f66037a10dbae4fc547e402931d689a9a1603ffa20335e394c0b9d37db90d
3
+ metadata.gz: afef9e22e0d014b5f2ebbf3c0d33ade376c134f26f4853099d2a792901740e8f
4
+ data.tar.gz: 926fa68ded405d6161072cc09f366bdd8fd069872b1a840735c0ab72984e51a8
5
5
  SHA512:
6
- metadata.gz: 4934a3233fc0f9bae10f33ced22aac334038f9d7e11563105b19ea4f591980242f16c06c73503342791415af09633189a9f7c57788cd6cf050cdda50374436a4
7
- data.tar.gz: 166130d7f1cb05e56eaff5be78b52a388bf8eeed60552d95b64884b14139d931323fae97bbcc879f204a61e96e0be833f8f7d3f4d8a7712af2df8adbafe1b68b
6
+ metadata.gz: e069988875e87c06a4127670c362a7a43aeb793822ff3abde8708982ddf84bfbfba1ba50bf1681e0db85fbfcb75ba8bc9e204ae87cfacf57fe0c7d2289816e22
7
+ data.tar.gz: 69a994eb58218bce941320c3f74ac1faf01efb8c3a17bb6112136c189d89b26f4c6f1ef6d9d8fe4dc144c9e4a3acb44c0331db4dea3b7853df6a878d41a05539
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # MockRedis Changelog
2
2
 
3
+ ### 0.54.0
4
+
5
+ * Add `(B)ZMPOP`, `BZPOPMIN`, and `BZPOPMAX` commands
6
+
3
7
  ### 0.53.0
4
8
 
5
9
  * Fix `redis.call("info")`
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Defines the gem version.
4
4
  class MockRedis
5
- VERSION = '0.53.0'
5
+ VERSION = '0.54.0'
6
6
  end
@@ -253,6 +253,92 @@ class MockRedis
253
253
  zcard(destination)
254
254
  end
255
255
 
256
+ def bzpopmin(*args)
257
+ keys, timeout = extract_timeout(args)
258
+ nonempty_zset = first_nonempty_zset(keys)
259
+
260
+ if nonempty_zset
261
+ member, score = zpopmin(nonempty_zset)
262
+ [nonempty_zset, member, score]
263
+ elsif timeout > 0
264
+ nil
265
+ else
266
+ raise MockRedis::WouldBlock, "Can't block forever"
267
+ end
268
+ end
269
+
270
+ def bzpopmax(*args)
271
+ keys, timeout = extract_timeout(args)
272
+ nonempty_zset = first_nonempty_zset(keys)
273
+
274
+ if nonempty_zset
275
+ member, score = zpopmax(nonempty_zset)
276
+ [nonempty_zset, member, score]
277
+ elsif timeout > 0
278
+ nil
279
+ else
280
+ raise MockRedis::WouldBlock, "Can't block forever"
281
+ end
282
+ end
283
+
284
+ def zmpop(*keys, **options)
285
+ keys.each do |key|
286
+ assert_zsety(key)
287
+ end
288
+
289
+ modifier = options.is_a?(Hash) && options[:modifier]&.to_s&.downcase || 'min'
290
+ count = (options.is_a?(Hash) && options[:count]) || 1
291
+
292
+ unless %w[min max].include?(modifier)
293
+ raise ArgumentError, 'Pick either MIN or MAX'
294
+ end
295
+
296
+ keys.each do |key|
297
+ record_count = zcard(key)
298
+ next if record_count.zero?
299
+
300
+ values = [count, record_count].min.times.map do
301
+ modifier == 'min' ? zpopmin(key) : zpopmax(key)
302
+ end
303
+
304
+ return [key, values]
305
+ end
306
+
307
+ nil
308
+ end
309
+
310
+ def bzmpop(timeout, *keys, **options)
311
+ timeout = assert_valid_timeout(timeout)
312
+
313
+ keys.each do |key|
314
+ assert_zsety(key)
315
+ end
316
+
317
+ modifier = options.is_a?(Hash) && options[:modifier]&.to_s&.downcase || 'min'
318
+ count = (options.is_a?(Hash) && options[:count]) || 1
319
+
320
+ unless %w[min max].include?(modifier)
321
+ raise ArgumentError, 'Pick either MIN or MAX'
322
+ end
323
+
324
+ keys.each do |key|
325
+ record_count = zcard(key)
326
+ next if record_count.zero?
327
+
328
+ values = [count, record_count].min.times.map do
329
+ modifier == 'min' ? zpopmin(key) : zpopmax(key)
330
+ end
331
+
332
+ return [key, values]
333
+ end
334
+
335
+ if timeout > 0
336
+ nil
337
+ else
338
+ raise MockRedis::WouldBlock, "Can't block forever"
339
+ end
340
+ end
341
+
256
342
  private
257
343
 
258
344
  def apply_limit(collection, limit)
@@ -376,5 +462,9 @@ class MockRedis
376
462
  assert_scorey(value, 'ERR min or max is not a float')
377
463
  end
378
464
  end
465
+
466
+ def first_nonempty_zset(keys)
467
+ keys.find { |k| zcard(k) > 0 }
468
+ end
379
469
  end
380
470
  end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mock_redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.53.0
4
+ version: 0.54.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane da Silva
8
8
  - Samuel Merritt
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2025-11-08 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: redis
@@ -125,11 +124,10 @@ licenses:
125
124
  - MIT
126
125
  metadata:
127
126
  bug_tracker_uri: https://github.com/sds/mock_redis/issues
128
- changelog_uri: https://github.com/sds/mock_redis/blob/v0.53.0/CHANGELOG.md
129
- documentation_uri: https://www.rubydoc.info/gems/mock_redis/0.53.0
127
+ changelog_uri: https://github.com/sds/mock_redis/blob/v0.54.0/CHANGELOG.md
128
+ documentation_uri: https://www.rubydoc.info/gems/mock_redis/0.54.0
130
129
  homepage_uri: https://github.com/sds/mock_redis
131
- source_code_uri: https://github.com/sds/mock_redis/tree/v0.53.0
132
- post_install_message:
130
+ source_code_uri: https://github.com/sds/mock_redis/tree/v0.54.0
133
131
  rdoc_options: []
134
132
  require_paths:
135
133
  - lib
@@ -144,8 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
142
  - !ruby/object:Gem::Version
145
143
  version: '0'
146
144
  requirements: []
147
- rubygems_version: 3.0.3.1
148
- signing_key:
145
+ rubygems_version: 3.6.9
149
146
  specification_version: 4
150
147
  summary: Redis mock that just lives in memory; useful for testing.
151
148
  test_files: []