Module: Mongoid::Tracking::Readers

Included in:
Tracker
Defined in:
lib/mongoid/tracking/readers.rb

Overview

Reader methods (previously known as “accessors”)

Instance Method Summary collapse

Instance Method Details

#all_valuesObject



40
41
42
# File 'lib/mongoid/tracking/readers.rb', line 40

def all_values
  on(first_date..last_date) if first_date
end

#all_values_totalObject



44
45
46
47
# 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_cleanupObject

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: Mongoid::Tracking::Readers.“$unset”=>{“visits_data“$unset”=>{“visits_data.14803“$unset”=>{“visits_data.14803.22”=>1

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

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



80
81
82
# File 'lib/mongoid/tracking/readers.rb', line 80

def date_cleanup
  @data.reject! {|k,v| v.count == 0}
end

#first_dateObject

Utility methods



50
51
52
53
54
55
# 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_valueObject



18
19
20
# File 'lib/mongoid/tracking/readers.rb', line 18

def first_value
  data_for(first_date)
end

#last_dateObject



57
58
59
60
61
62
# 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) ⇒ Object



26
27
28
29
30
# 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_valueObject



22
23
24
# File 'lib/mongoid/tracking/readers.rb', line 22

def last_value
  data_for(last_date)
end

#on(date) ⇒ Object



32
33
34
35
36
37
38
# 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

#todayObject

Access methods



10
11
12
# File 'lib/mongoid/tracking/readers.rb', line 10

def today
  whole_data_for(Time.now)
end

#yesterdayObject



14
15
16
# File 'lib/mongoid/tracking/readers.rb', line 14

def yesterday
  whole_data_for(Time.now - 1.day)
end