Module: MockRedis::SetMethods
- Includes:
- Assertions, UtilityMethods
- Included in:
- Database
- Defined in:
- lib/mock_redis/set_methods.rb
Instance Method Summary collapse
- #sadd(key, members) ⇒ Object
- #scard(key) ⇒ Object
- #sdiff(*keys) ⇒ Object
- #sdiffstore(destination, *keys) ⇒ Object
- #sinter(*keys) ⇒ Object
- #sinterstore(destination, *keys) ⇒ Object
- #sismember(key, member) ⇒ Object
- #smembers(key) ⇒ Object
- #smove(src, dest, member) ⇒ Object
- #spop(key) ⇒ Object
- #srandmember(key, count = nil) ⇒ Object
- #srem(key, members) ⇒ Object
- #sunion(*keys) ⇒ Object
- #sunionstore(destination, *keys) ⇒ Object
Instance Method Details
#sadd(key, members) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/mock_redis/set_methods.rb', line 9 def sadd(key, members) members = [members].flatten.map(&:to_s) with_set_at(key) do |s| if members.size > 1 size_before = s.size members.reverse.each {|m| s << m} s.size - size_before else !!s.add?(members.first) end end end |
#scard(key) ⇒ Object
23 24 25 |
# File 'lib/mock_redis/set_methods.rb', line 23 def scard(key) with_set_at(key) {|s| s.length} end |
#sdiff(*keys) ⇒ Object
27 28 29 30 |
# File 'lib/mock_redis/set_methods.rb', line 27 def sdiff(*keys) assert_has_args(keys, 'sdiff') with_sets_at(*keys) {|*sets| sets.reduce(&:-)}.to_a end |
#sdiffstore(destination, *keys) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/mock_redis/set_methods.rb', line 32 def sdiffstore(destination, *keys) assert_has_args(keys, 'sdiffstore') with_set_at(destination) do |set| set.replace(sdiff(*keys)) end scard(destination) end |
#sinter(*keys) ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/mock_redis/set_methods.rb', line 40 def sinter(*keys) assert_has_args(keys, 'sinter') with_sets_at(*keys) do |*sets| sets.reduce(&:&).to_a end end |
#sinterstore(destination, *keys) ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/mock_redis/set_methods.rb', line 48 def sinterstore(destination, *keys) assert_has_args(keys, 'sinterstore') with_set_at(destination) do |set| set.replace(sinter(*keys)) end scard(destination) end |
#sismember(key, member) ⇒ Object
56 57 58 |
# File 'lib/mock_redis/set_methods.rb', line 56 def sismember(key, member) with_set_at(key) {|s| s.include?(member.to_s)} end |
#smembers(key) ⇒ Object
60 61 62 |
# File 'lib/mock_redis/set_methods.rb', line 60 def smembers(key) with_set_at(key, &:to_a).reverse end |
#smove(src, dest, member) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/mock_redis/set_methods.rb', line 64 def smove(src, dest, member) member = member.to_s with_sets_at(src, dest) do |src_set, dest_set| if src_set.delete?(member) dest_set.add(member) true else false end end end |
#spop(key) ⇒ Object
77 78 79 80 81 82 83 |
# File 'lib/mock_redis/set_methods.rb', line 77 def spop(key) with_set_at(key) do |set| member = set.first set.delete(member) member end end |
#srandmember(key, count = nil) ⇒ Object
85 86 87 88 |
# File 'lib/mock_redis/set_methods.rb', line 85 def srandmember(key, count = nil) members = with_set_at(key, &:to_a) members[rand(members.length)] end |
#srem(key, members) ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/mock_redis/set_methods.rb', line 90 def srem(key, members) with_set_at(key) do |s| if members.is_a?(Array) orig_size = s.size s.delete_if { |m| members.include?(m) } orig_size - s.size else !!s.delete?(members.to_s) end end end |
#sunion(*keys) ⇒ Object
102 103 104 105 |
# File 'lib/mock_redis/set_methods.rb', line 102 def sunion(*keys) assert_has_args(keys, 'sunion') with_sets_at(*keys) {|*sets| sets.reduce(&:+).to_a} end |
#sunionstore(destination, *keys) ⇒ Object
107 108 109 110 111 112 113 |
# File 'lib/mock_redis/set_methods.rb', line 107 def sunionstore(destination, *keys) assert_has_args(keys, 'sunionstore') with_set_at(destination) do |dest_set| dest_set.replace(sunion(*keys)) end scard(destination) end |