Skip to content

Commit

Permalink
feature: Add smismember
Browse files Browse the repository at this point in the history
Signed-off-by: Valentin Kiselev <mrexox@evilmartians.com>
  • Loading branch information
mrexox committed Jan 17, 2023
1 parent 4c4dce2 commit cc5b150
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
6 changes: 6 additions & 0 deletions lib/mock_redis/set_methods.rb
Expand Up @@ -64,6 +64,12 @@ def sismember(key, member)
with_set_at(key) { |s| s.include?(member.to_s) }
end

def smismember(key, *members)
with_set_at(key) do |set|
members.flatten.map { |m| set.include?(m.to_s) }
end
end

def smembers(key)
with_set_at(key, &:to_a).map(&:dup).reverse
end
Expand Down
34 changes: 34 additions & 0 deletions spec/commands/smismember_spec.rb
@@ -0,0 +1,34 @@
require 'spec_helper'

describe '#sismember(key, *members)' do
before do
@key = 'mock-redis-test:smismember'
@redises.sadd(@key, 'whiskey')
@redises.sadd(@key, 'beer')
end

it 'returns true if member is in set' do
@redises.smismember(@key, 'whiskey').should == [true]
@redises.smismember(@key, 'beer').should == [true]
@redises.smismember(@key, 'whiskey', 'beer').should == [true, true]
@redises.smismember(@key, ['whiskey', 'beer']).should == [true, true]
end

it 'returns false if member is not in set' do
@redises.smismember(@key, 'cola').should == [false]
@redises.smismember(@key, 'whiskey', 'cola').should == [true, false]
@redises.smismember(@key, ['whiskey', 'beer', 'cola']).should == [true, true, false]
end

it 'stringifies member' do
@redises.sadd(@key, '1')
@redises.smismember(@key, 1).should == [true]
@redises.smismember(@key, [1]).should == [true]
end

it 'treats a nonexistent value as an empty set' do
@redises.smismember('mock-redis-test:nonesuch', 'beer').should == [false]
end

it_should_behave_like 'a set-only command'
end

0 comments on commit cc5b150

Please sign in to comment.