Module: MockRedis::SetMethods

Includes:
Assertions, UtilityMethods
Included in:
Database
Defined in:
lib/mock_redis/set_methods.rb

Instance Method Summary collapse

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