Class: RedisRds::Set

Inherits:
Object show all
Includes:
Enumerable
Defined in:
lib/redis_rds/set.rb

Instance Attribute Summary

Attributes inherited from Object

#redis_key

Instance Method Summary collapse

Methods inherited from Object

configure, #connection, connection, #delete, #dump, #exists?, #expire, #expireat, flushdb, #initialize, #namespace, #persist, #pttl, #ttl, #type

Constructor Details

This class inherits a constructor from RedisRds::Object

Instance Method Details

#add(item) ⇒ Object Also known as: <<, push



5
6
7
# File 'lib/redis_rds/set.rb', line 5

def add(item)
  return connection.sadd(@redis_key, item)
end

#allObject



28
29
30
# File 'lib/redis_rds/set.rb', line 28

def all
  return ::Set.new(connection.smembers(@redis_key)).to_a
end

#consumeObject



32
33
34
35
36
37
38
39
40
41
# File 'lib/redis_rds/set.rb', line 32

def consume
  lua_script = "
    local result = redis.call('smembers', KEYS[1]);
    redis.call('del', KEYS[1]);
    return result;"
  result = connection.eval(lua_script, [@redis_key])
  result = [] if result.blank?

  return ::Set.new(Array.wrap(result).compact).to_a
end

#each(&block) ⇒ Object

TODO: Implement lazy enumerator



56
57
58
# File 'lib/redis_rds/set.rb', line 56

def each(&block)
  return all.each(&block)
end

#include?(object) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/redis_rds/set.rb', line 47

def include?(object)
  return connection.sismember(@redis_key, object)
end

#merge(enumerable) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/redis_rds/set.rb', line 11

def merge(enumerable)
  lua_script = "
    local result = 0;
    for i, item in ipairs(ARGV) do
      result = result + redis.call('sadd', KEYS[1], item);
    end
    return result;"
  result = connection.eval(lua_script, [@redis_key], enumerable.entries)
  result = [] if result.blank?

  return result
end

#remove(item) ⇒ Object



24
25
26
# File 'lib/redis_rds/set.rb', line 24

def remove(item)
  return connection.srem(@redis_key, item)
end

#sizeObject



43
44
45
# File 'lib/redis_rds/set.rb', line 43

def size
  return connection.scard(@redis_key)
end

#to_jsonObject



51
52
53
# File 'lib/redis_rds/set.rb', line 51

def to_json
  return all.to_json
end