Class: RedisSet

Inherits:
Object
  • Object
show all
Defined in:
lib/redis_set.rb

Defined Under Namespace

Classes: InvalidNameException, InvalidRedisConfigException

Constant Summary collapse

VERSION =
"0.0.3"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, redis_or_options = {}) ⇒ RedisSet

Returns a new instance of RedisSet.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/redis_set.rb', line 11

def initialize(name, redis_or_options = {})
	name = name.to_s if name.kind_of? Symbol

	raise InvalidNameException.new unless name.kind_of?(String) && name.size > 0
	@name = name
	@redis = if redis_or_options.kind_of?(Redis)
		         redis_or_options
		       elsif redis_or_options.kind_of? Hash
			       ::Redis.new redis_or_options
		       elsif defined?(ActiveSupport::Cache::RedisStore) && redis_or_options.kind_of?(ActiveSupport::Cache::RedisStore)
			       @pooled = redis_or_options.data.kind_of?(ConnectionPool)
			       redis_or_options.data
		       elsif defined?(ConnectionPool) && redis_or_options.kind_of?(ConnectionPool)
			       @pooled = true
			       redis_or_options
		       else
			       raise InvalidRedisConfigException.new
	         end
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



4
5
6
# File 'lib/redis_set.rb', line 4

def name
  @name
end

Instance Method Details

#add(*values) ⇒ Object Also known as: push



31
32
33
34
# File 'lib/redis_set.rb', line 31

def add *values
	values = [values].flatten
	with{|redis| redis.sadd name, values} if values.size > 0
end

#add_with_count(value) ⇒ Object Also known as: push_with_count



38
39
40
# File 'lib/redis_set.rb', line 38

def add_with_count value
	block_on_atomic_attempt { attempt_atomic_add_read_count value }
end

#allObject



63
64
65
# File 'lib/redis_set.rb', line 63

def all
	with{|redis| redis.smembers name}
end

#clearObject Also known as: flush



97
98
99
100
# File 'lib/redis_set.rb', line 97

def clear
	with{|redis| redis.del name}
	[]
end

#enumerator(slice_size = 10) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/redis_set.rb', line 84

def enumerator(slice_size = 10)
	cursor = 0
	Enumerator.new do |yielder|
		loop do
			cursor, items = scan cursor, slice_size
			items.each do |item|
				yielder << item
			end
			raise StopIteration if cursor.to_i.zero?
		end
	end
end

#expire(seconds) ⇒ Object



104
105
106
# File 'lib/redis_set.rb', line 104

def expire seconds
	with{|redis| redis.expire name, seconds}
end

#include?(value) ⇒ Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/redis_set.rb', line 53

def include? value
	with{|redis| redis.sismember(name, value)}
end

#intersection(*sets) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/redis_set.rb', line 67

def intersection *sets
	sets = [sets].flatten
	sets = sets.map do |s|
		if s.kind_of?(self.class)
			s.name
		else
			s
		end
	end

	with{|redis| redis.sinter *sets }
end

#pop(amount = 1) ⇒ Object



49
50
51
# File 'lib/redis_set.rb', line 49

def pop(amount = 1)
	with{|redis| redis.spop name, amount}
end

#remove(*values) ⇒ Object



44
45
46
47
# File 'lib/redis_set.rb', line 44

def remove *values
	values = [values].flatten
	with{|redis|redis.srem name, values} if values.size > 0
end

#scan(cursor = 0, amount = 10, match = "*") ⇒ Object



80
81
82
# File 'lib/redis_set.rb', line 80

def scan cursor = 0, amount = 10, match = "*"
	with{|redis| redis.sscan name, cursor, :count => amount, :match => match}
end

#sizeObject Also known as: count



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

def size
	with{|redis| redis.scard name}
end