Class: ActiveSet
- Inherits:
-
Object
- Object
- ActiveSet
- Defined in:
- lib/active_set.rb
Constant Summary collapse
- VERSION =
"0.1.0"
- SECONDS_PER_DAY =
86400
Instance Attribute Summary collapse
-
#key ⇒ Object
readonly
Returns the value of attribute key.
Instance Method Summary collapse
-
#add(entry, time = Time.now) ⇒ Object
Public: Adds a new object to the Set.
-
#clear ⇒ Object
Public: Clears the Set.
-
#count(since = nil) ⇒ Object
Public: Counts the number of objects in the set.
-
#earliest_time ⇒ Object
Calculates the earliest time used as a cutoff point for #trim.
-
#include?(entry) ⇒ Boolean
Public: Checks to see if the object is in the Set.
-
#initialize(name, options = {}) ⇒ ActiveSet
constructor
Initializes a new Set of active objects.
-
#timestamp_for(entry) ⇒ Object
Public: Gets the timestamp for when the given object was active.
-
#trim(time = earliest_time) ⇒ Object
Public: Trims the Set.
Constructor Details
#initialize(name, options = {}) ⇒ ActiveSet
Initializes a new Set of active objects.
name - String name to identify this ActiveSet. options - Hash of options.
:prefix - String prefix used to namespace the Redis key.
:days - Default Fixnum of days of items to allow in the
set. Default to 30.
:sec - Fixnum of seconds of items to allow in the set.
Defaults to using MATH to calculate seconds in
30 days.
:redis - An existing Redis connection. If not set, the
rest of this options Hash is used to initialize
a new Redis connection.
22 23 24 25 26 27 28 29 30 |
# File 'lib/active_set.rb', line 22 def initialize(name, = {}) @name = name @prefix = .delete(:prefix) || :active @days = .delete(:days) || 30 @sec = .delete(:sec) || (SECONDS_PER_DAY * @days) @redis = .delete(:redis) @key = "#{@prefix}:#{@name}" @redis ||= Redis.new() end |
Instance Attribute Details
#key ⇒ Object (readonly)
Returns the value of attribute key.
7 8 9 |
# File 'lib/active_set.rb', line 7 def key @key end |
Instance Method Details
#add(entry, time = Time.now) ⇒ Object
Public: Adds a new object to the Set.
entry - The String identifier of the object. time - Optional Time specifying when the object was last active.
Returns nothing.
38 39 40 |
# File 'lib/active_set.rb', line 38 def add(entry, time = Time.now) @redis.zadd(@key, time.to_i, entry) end |
#clear ⇒ Object
Public: Clears the Set.
Returns nothing.
87 88 89 |
# File 'lib/active_set.rb', line 87 def clear @redis.del(@key) end |
#count(since = nil) ⇒ Object
Public: Counts the number of objects in the set.
since - An optional Time to specify the cutoff time to
count. If provided, any object updated since the timestamp
is counted.
Returns a Fixnum.
68 69 70 71 72 |
# File 'lib/active_set.rb', line 68 def count(since = nil) (since ? @redis.zcount(@key, since.to_i, "+inf") : @redis.zcard(@key)).to_i end |
#earliest_time ⇒ Object
Calculates the earliest time used as a cutoff point for #trim.
Returns Fixnum seconds.
94 95 96 |
# File 'lib/active_set.rb', line 94 def earliest_time Time.now.to_i - @sec end |
#include?(entry) ⇒ Boolean
Public: Checks to see if the object is in the Set.
entry - The String identifier of the object.
Returns true if the object is in the set, or false.
47 48 49 |
# File 'lib/active_set.rb', line 47 def include?(entry) !@redis.zscore(@key, entry).nil? end |
#timestamp_for(entry) ⇒ Object
Public: Gets the timestamp for when the given object was active.
entry - The String identifier of the object.
Returns the Time the object was last active, or nil.
56 57 58 59 |
# File 'lib/active_set.rb', line 56 def (entry) sec = @redis.zscore(@key, entry) sec ? Time.at(sec.to_i) : nil end |
#trim(time = earliest_time) ⇒ Object
Public: Trims the Set.
time - Optional Time specifying the earliest cutoff point. Any
object with a later timestamp is purged.
Returns nothing.
80 81 82 |
# File 'lib/active_set.rb', line 80 def trim(time = earliest_time) @redis.zremrangebyscore(@key, "-inf", "(#{time.to_i}") end |