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
-
#counters ⇒ Object
readonly
Returns the value of attribute counters.
-
#initialized_counters ⇒ Object
readonly
Returns the value of attribute initialized_counters.
Instance Method Summary collapse
-
#counter(name, options = {}) ⇒ Object
Define a new counter.
-
#decrement_counter(name, id, by = 1, &block) ⇒ Object
Decrement a counter with the specified name and id.
-
#get_counter(name, id) ⇒ Object
Get the current value of the counter.
-
#increment_counter(name, id, by = 1, &block) ⇒ Object
Increment a counter with the specified name and id.
-
#reset_counter(name, id, to = nil) ⇒ Object
Reset a counter to its starting value.
Instance Attribute Details
#counters ⇒ Object (readonly)
Returns the value of attribute counters.
17 18 19 |
# File 'lib/redis/objects/counters.rb', line 17 def counters @counters end |
#initialized_counters ⇒ Object (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, ={}) [:start] ||= 0 [:type] ||= [:start] == 0 ? :increment : :decrement @counters[name] = 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 |