module Mongoid::Tracking::Readers

Reader methods (previously known as “accessors”)

Public Instance Methods

all_values() click to toggle source
# File lib/mongoid/tracking/readers.rb, line 40
def all_values
  on(first_date..last_date) if first_date
end
all_values_total() click to toggle source
# File lib/mongoid/tracking/readers.rb, line 44
def all_values_total
  return all_values.sum.to_i if all_values && !all_values.nil?
  return 0
end
date_cleanup() click to toggle source

We need the cleanup method only for methods who rely on date indexes to be valid (well formed) like first/last_date. This is because Mongo update operations cleans up the last key, which in our case left the array in an inconsistent state.

Example: Before update:

{ :visits_data => {"14803" => {"22" => 1} } }

After updating with: {“$unset”=>{“visits_data.14803.22”=>1}

{ :visits_data => {"14803" => {} } }

We can NOT retrieve the first date with visits_data.keys.min

# File lib/mongoid/tracking/readers.rb, line 80
def date_cleanup
  @data.reject! {|k,v| v.count == 0}
end
first_date() click to toggle source

Utility methods

# File lib/mongoid/tracking/readers.rb, line 50
def first_date
  date_cleanup
  return nil unless _ts = @data.keys.min
  return nil unless _h = @data[_ts].keys.min
  Time.from_key(_ts, _h)
end
first_value() click to toggle source
# File lib/mongoid/tracking/readers.rb, line 18
def first_value
  data_for(first_date)
end
last_date() click to toggle source
# File lib/mongoid/tracking/readers.rb, line 57
def last_date
  date_cleanup
  return nil unless _ts = @data.keys.max
  return nil unless _h = @data[_ts].keys.max
  Time.from_key(_ts, _h)
end
last_days(how_much = 7) click to toggle source
# File lib/mongoid/tracking/readers.rb, line 26
def last_days(how_much = 7)
  return [today] unless how_much > 0
  now, hmd = Time.now, (how_much - 1)
  on( now.ago(hmd.days)..now )
end
last_value() click to toggle source
# File lib/mongoid/tracking/readers.rb, line 22
def last_value
  data_for(last_date)
end
on(date) click to toggle source
# File lib/mongoid/tracking/readers.rb, line 32
def on(date)
  if date.is_a?(Range)
    whole_data_for_range(date)
  else
    whole_data_for(date)
  end
end
today() click to toggle source

Access methods

# File lib/mongoid/tracking/readers.rb, line 10
def today
  whole_data_for(Time.now)
end
yesterday() click to toggle source
# File lib/mongoid/tracking/readers.rb, line 14
def yesterday
  whole_data_for(Time.now - 1.day)
end