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
22
# File 'lib/mock_redis/set_methods.rb', line 9

def sadd(key, members)
  members = [members].flatten.map(&:to_s)
  assert_has_args(members, 'sadd')

  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



24
25
26
# File 'lib/mock_redis/set_methods.rb', line 24

def scard(key)
  with_set_at(key) {|s| s.length}
end

#sdiff(*keys) ⇒ Object



28
29
30
31
# File 'lib/mock_redis/set_methods.rb', line 28

def sdiff(*keys)
  assert_has_args(keys, 'sdiff')
  with_sets_at(*keys) {|*sets| sets.reduce(&:-)}.to_a
end

#sdiffstore(destination, *keys) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/mock_redis/set_methods.rb', line 33

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



41
42
43
44
45
46
47
# File 'lib/mock_redis/set_methods.rb', line 41

def sinter(*keys)
  assert_has_args(keys, 'sinter')

  with_sets_at(*keys) do |*sets|
    sets.reduce(&:&).to_a
  end
end

#sinterstore(destination, *keys) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/mock_redis/set_methods.rb', line 49

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



57
58
59
# File 'lib/mock_redis/set_methods.rb', line 57

def sismember(key, member)
  with_set_at(key) {|s| s.include?(member.to_s)}
end

#smembers(key) ⇒ Object



61
62
63
# File 'lib/mock_redis/set_methods.rb', line 61

def smembers(key)
  with_set_at(key, &:to_a).map(&:dup).reverse
end

#smove(src, dest, member) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/mock_redis/set_methods.rb', line 65

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



78
79
80
81
82
83
84
# File 'lib/mock_redis/set_methods.rb', line 78

def spop(key)
  with_set_at(key) do |set|
    member = set.first
    set.delete(member)
    member
  end
end

#srandmember(key, count = nil) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/mock_redis/set_methods.rb', line 86

def srandmember(key, count = nil)
  members = with_set_at(key, &:to_a)
  if count
    if count > 0
      members.sample(count)
    else
      count.abs.times.map { members[rand(members.length)] }
    end
  else
    members[rand(members.length)]
  end
end

#srem(key, members) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
# File 'lib/mock_redis/set_methods.rb', line 99

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



111
112
113
114
# File 'lib/mock_redis/set_methods.rb', line 111

def sunion(*keys)
  assert_has_args(keys, 'sunion')
  with_sets_at(*keys) {|*sets| sets.reduce(&:+).to_a}
end

#sunionstore(destination, *keys) ⇒ Object



116
117
118
119
120
121
122
# File 'lib/mock_redis/set_methods.rb', line 116

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