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
-
#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 = nil, by = 1, &block) ⇒ Object
Decrement a counter with the specified name and id.
-
#get_counter(name, id = nil) ⇒ Object
Get the current value of the counter.
-
#increment_counter(name, id = nil, by = 1, &block) ⇒ Object
Increment a counter with the specified name and id.
-
#reset_counter(name, id = nil, to = nil) ⇒ Object
Reset a counter to its starting value.
Instance Attribute Details
#initialized_counters ⇒ Object (readonly)
Returns the value of attribute initialized_counters.
18 19 20 |
# File 'lib/redis/objects/counters.rb', line 18 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.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/redis/objects/counters.rb', line 22 def counter(name, ={}) [:start] ||= 0 [:type] ||= [:start] == 0 ? :increment : :decrement @redis_objects[name.to_sym] = .merge(:type => :counter) if [:global] instance_eval <<-EndMethods def #{name} @#{name} ||= Redis::Counter.new(field_key(:#{name}), redis, @redis_objects[:#{name}]) end EndMethods class_eval <<-EndMethods def #{name} self.class.#{name} end EndMethods else class_eval <<-EndMethods def #{name} @#{name} ||= Redis::Counter.new(field_key(:#{name}), redis, self.class.redis_objects[:#{name}]) end EndMethods end end |
#decrement_counter(name, id = nil, 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.
65 66 67 68 69 70 |
# File 'lib/redis/objects/counters.rb', line 65 def decrement_counter(name, id=nil, by=1, &block) verify_counter_defined!(name, id) initialize_counter!(name, id) value = redis.decrby(field_key(name, id), by).to_i block_given? ? rewindable_block(:increment_counter, name, id, value, &block) : value end |
#get_counter(name, id = nil) ⇒ Object
Get the current value of the counter. It is more efficient to use the instance method if possible.
48 49 50 51 52 |
# File 'lib/redis/objects/counters.rb', line 48 def get_counter(name, id=nil) verify_counter_defined!(name, id) initialize_counter!(name, id) redis.get(field_key(name, id)).to_i end |
#increment_counter(name, id = nil, 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.
56 57 58 59 60 61 |
# File 'lib/redis/objects/counters.rb', line 56 def increment_counter(name, id=nil, by=1, &block) verify_counter_defined!(name, id) initialize_counter!(name, id) value = redis.incrby(field_key(name, id), by).to_i block_given? ? rewindable_block(:decrement_counter, name, id, value, &block) : value end |
#reset_counter(name, id = nil, to = nil) ⇒ Object
Reset a counter to its starting value.
73 74 75 76 77 78 |
# File 'lib/redis/objects/counters.rb', line 73 def reset_counter(name, id=nil, to=nil) verify_counter_defined!(name, id) to = @redis_objects[name][:start] if to.nil? redis.set(field_key(name, id), to.to_i) true end |