Skip to content

Commit 19bbbc8

Browse files
authored
Merge pull request #628 from ceritium/spop-count
Add spop count support
2 parents d75708f + 6c25337 commit 19bbbc8

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

lib/redis.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,13 +1336,18 @@ def srem(key, member)
13361336
end
13371337
end
13381338

1339-
# Remove and return a random member from a set.
1339+
# Remove and return one or more random member from a set.
13401340
#
13411341
# @param [String] key
13421342
# @return [String]
1343-
def spop(key)
1343+
# @param [Fixnum] count
1344+
def spop(key, count = nil)
13441345
synchronize do |client|
1345-
client.call([:spop, key])
1346+
if count.nil?
1347+
client.call([:spop, key])
1348+
else
1349+
client.call([:spop, key, count])
1350+
end
13461351
end
13471352
end
13481353

lib/redis/distributed.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,8 @@ def srem(key, member)
483483
end
484484

485485
# Remove and return a random member from a set.
486-
def spop(key)
487-
node_for(key).spop(key)
486+
def spop(key, count = nil)
487+
node_for(key).spop(key, count)
488488
end
489489

490490
# Get a random member from a set.

test/lint/sets.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,21 @@ def test_spop
5252
assert_equal nil, r.spop("foo")
5353
end
5454

55+
def test_spop_with_positive_count
56+
target_version "3.2.0" do
57+
r.sadd "foo", "s1"
58+
r.sadd "foo", "s2"
59+
r.sadd "foo", "s3"
60+
r.sadd "foo", "s4"
61+
62+
pops = r.spop("foo", 3)
63+
64+
assert !(["s1", "s2", "s3", "s4"] & pops).empty?
65+
assert_equal 3, pops.size
66+
assert_equal 1, r.scard("foo")
67+
end
68+
end
69+
5570
def test_scard
5671
assert_equal 0, r.scard("foo")
5772

0 commit comments

Comments
 (0)