Module: Redis::Objects::Counters::ClassMethods

Defined in:
lib/redis/objects/counters.rb

Overview

Class methods that appear in your class when you include Redis::Objects.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#countersObject (readonly)

Returns the value of attribute counters.



17
18
19
# File 'lib/redis/objects/counters.rb', line 17

def counters
  @counters
end

#initialized_countersObject (readonly)

Returns the value of attribute initialized_counters.



17
18
19
# File 'lib/redis/objects/counters.rb', line 17

def initialized_counters
  @initialized_counters
end

Instance Method Details

#counter(name, options = {}) ⇒ Object

Define a new counter. It will function like a regular instance method, so it can be used alongside ActiveRecord, DataMapper, etc.



21
22
23
24
25
26
27
28
29
30
# File 'lib/redis/objects/counters.rb', line 21

def counter(name, options={})
  options[:start] ||= 0
  options[:type]  ||= options[:start] == 0 ? :increment : :decrement
  @counters[name] = options
  class_eval <<-EndMethods
    def #{name}
      @#{name} ||= Redis::Counter.new(field_key(:#{name}), redis, self.class.counters[:#{name}])
    end
  EndMethods
end

#decrement_counter(name, id, by = 1, &block) ⇒ Object

Decrement a counter with the specified name and id. Accepts a block like the instance method. See Redis::Objects::Counter for details.



51
52
53
54
55
56
# File 'lib/redis/objects/counters.rb', line 51

def decrement_counter(name, id, by=1, &block)
  verify_counter_defined!(name)
  initialize_counter!(name, id)
  value = redis.decr(field_key(name, id), by).to_i
  block_given? ? rewindable_block(:increment_counter, name, id, value, &block) : value
end

#get_counter(name, id) ⇒ Object

Get the current value of the counter. It is more efficient to use the instance method if possible.



34
35
36
37
38
# File 'lib/redis/objects/counters.rb', line 34

def get_counter(name, id)
  verify_counter_defined!(name)
  initialize_counter!(name, id)
  redis.get(field_key(name, id)).to_i
end

#increment_counter(name, id, by = 1, &block) ⇒ Object

Increment a counter with the specified name and id. Accepts a block like the instance method. See Redis::Objects::Counter for details.



42
43
44
45
46
47
# File 'lib/redis/objects/counters.rb', line 42

def increment_counter(name, id, by=1, &block)
  verify_counter_defined!(name)
  initialize_counter!(name, id)
  value = redis.incr(field_key(name, id), by).to_i
  block_given? ? rewindable_block(:decrement_counter, name, id, value, &block) : value
end

#reset_counter(name, id, to = nil) ⇒ Object

Reset a counter to its starting value.



59
60
61
62
63
# File 'lib/redis/objects/counters.rb', line 59

def reset_counter(name, id, to=nil)
  verify_counter_defined!(name)
  to = @counters[name][:start] if to.nil?
  redis.set(field_key(name, id), to)
end