From 2b19b73e60e6f68188c298ec7bb2fd3501617e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20=C3=96hlinger?= Date: Mon, 17 May 2021 20:28:25 +0200 Subject: [PATCH 1/4] adds ZMSCORE to sorted set commands --- lib/redis.rb | 15 +++++++++++++++ lib/redis/distributed.rb | 5 +++++ test/lint/sorted_sets.rb | 9 +++++++++ 3 files changed, 29 insertions(+) diff --git a/lib/redis.rb b/lib/redis.rb index 51080a14e..2c0a522f4 100644 --- a/lib/redis.rb +++ b/lib/redis.rb @@ -1754,6 +1754,21 @@ def zscore(key, member) end end + # Get the scores associated with the given members in a sorted set. + # + # @example Get the score for member "a" + # redis.zmscore("zset", "a", "no_member", "b") + # # => [32.0, nil, 64.0] + # + # @param [String] key + # @param [Array] members + # @return [[Array] scores of the members + def zmscore(key, *members) + synchronize do |client| + client.call([:zmscore, key] + members)&.map(&:to_f) + end + end + # Return a range of members in a sorted set, by index. # # @example Retrieve all members from a sorted set diff --git a/lib/redis/distributed.rb b/lib/redis/distributed.rb index 0ffaa2bd2..cfccf3670 100644 --- a/lib/redis/distributed.rb +++ b/lib/redis/distributed.rb @@ -626,6 +626,11 @@ def zscore(key, member) node_for(key).zscore(key, member) end + # Get the scores associated with the given members in a sorted set. + def zmscore(key, members) + node_for(key).zmscore(key, members) + end + # Return a range of members in a sorted set, by index. def zrange(key, start, stop, **options) node_for(key).zrange(key, start, stop, **options) diff --git a/test/lint/sorted_sets.rb b/test/lint/sorted_sets.rb index 40a6f02ea..b995a69e0 100644 --- a/test/lint/sorted_sets.rb +++ b/test/lint/sorted_sets.rb @@ -293,6 +293,15 @@ def test_zscore assert_equal(+Float::INFINITY, r.zscore("bar", "s2")) end + def test_zmscore + r.zadd "foo", [1, "s1", 2, "s2"] + + assert_equal [1.0, 2.0], r.zmscore("foo", ["s1", "s2"]) + + assert_equal [1.0, 0.0, 2.0], r.zscore("foo", ["s1", "no_member", "s2"]) + assert_equal [0.0], r.zscore("no_key", ["no_member"]) + end + def test_zremrangebyrank r.zadd "foo", 10, "s1" r.zadd "foo", 20, "s2" From 4e89f13ef7143b5500e71015b9c300e3792b1d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20=C3=96hlinger?= Date: Tue, 18 May 2021 17:27:21 +0200 Subject: [PATCH 2/4] adds variadic parameter to distributed function and fixes tests --- lib/redis/distributed.rb | 4 ++-- test/lint/sorted_sets.rb | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/redis/distributed.rb b/lib/redis/distributed.rb index cfccf3670..af644eaf3 100644 --- a/lib/redis/distributed.rb +++ b/lib/redis/distributed.rb @@ -627,8 +627,8 @@ def zscore(key, member) end # Get the scores associated with the given members in a sorted set. - def zmscore(key, members) - node_for(key).zmscore(key, members) + def zmscore(key, *members) + node_for(key).zmscore(key, *members) end # Return a range of members in a sorted set, by index. diff --git a/test/lint/sorted_sets.rb b/test/lint/sorted_sets.rb index b995a69e0..866b33da6 100644 --- a/test/lint/sorted_sets.rb +++ b/test/lint/sorted_sets.rb @@ -296,10 +296,9 @@ def test_zscore def test_zmscore r.zadd "foo", [1, "s1", 2, "s2"] - assert_equal [1.0, 2.0], r.zmscore("foo", ["s1", "s2"]) - - assert_equal [1.0, 0.0, 2.0], r.zscore("foo", ["s1", "no_member", "s2"]) - assert_equal [0.0], r.zscore("no_key", ["no_member"]) + assert_equal [1.0, 2.0], r.zmscore("foo", "s1", "s2") + assert_equal [1.0, 0.0, 2.0], r.zmscore("foo", "s1", "no_member", "s2") + assert_equal [0.0], r.zmscore("no_key", "no_member") end def test_zremrangebyrank From 6717c932f5751acce60b37275f38c7772508dff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20=C3=96hlinger?= Date: Wed, 19 May 2021 10:05:11 +0200 Subject: [PATCH 3/4] only test against target_version > 6.2.0 --- test/lint/sorted_sets.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/lint/sorted_sets.rb b/test/lint/sorted_sets.rb index 866b33da6..c8e7b371f 100644 --- a/test/lint/sorted_sets.rb +++ b/test/lint/sorted_sets.rb @@ -294,11 +294,13 @@ def test_zscore end def test_zmscore - r.zadd "foo", [1, "s1", 2, "s2"] + target_version "6.2.0" do + r.zadd "foo", [1, "s1", 2, "s2"] - assert_equal [1.0, 2.0], r.zmscore("foo", "s1", "s2") - assert_equal [1.0, 0.0, 2.0], r.zmscore("foo", "s1", "no_member", "s2") - assert_equal [0.0], r.zmscore("no_key", "no_member") + assert_equal [1.0, 2.0], r.zmscore("foo", "s1", "s2") + assert_equal [1.0, 0.0, 2.0], r.zmscore("foo", "s1", "no_member", "s2") + assert_equal [0.0], r.zmscore("no_key", "no_member")# + end end def test_zremrangebyrank From 698457bf31db7559d19eafbe45de0125b293ce60 Mon Sep 17 00:00:00 2001 From: dominikoehlinger Date: Fri, 11 Jun 2021 10:40:53 +0200 Subject: [PATCH 4/4] removes empty comment from sorted_sets.rb Co-authored-by: Jean Boussier --- test/lint/sorted_sets.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/lint/sorted_sets.rb b/test/lint/sorted_sets.rb index c8e7b371f..44f6693e6 100644 --- a/test/lint/sorted_sets.rb +++ b/test/lint/sorted_sets.rb @@ -299,7 +299,7 @@ def test_zmscore assert_equal [1.0, 2.0], r.zmscore("foo", "s1", "s2") assert_equal [1.0, 0.0, 2.0], r.zmscore("foo", "s1", "no_member", "s2") - assert_equal [0.0], r.zmscore("no_key", "no_member")# + assert_equal [0.0], r.zmscore("no_key", "no_member") end end