Class: ModelsStats::StatisticsCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/models_stats/statistics_collector.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#dateObject

Returns the value of attribute date.



3
4
5
# File 'lib/models_stats/statistics_collector.rb', line 3

def date
  @date
end

Instance Method Details

#collect(stat_alias = nil, date = 1.day.ago.to_date) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/models_stats/statistics_collector.rb', line 5

def collect(stat_alias = nil, date = 1.day.ago.to_date)
  self.date = date
  stat_params = ModelsStats::CONFIG.select{|params| name, p = params.first; name.to_s == stat_alias.to_s}
  models = if stat_params.empty?
             ModelsStats::CONFIG
           else
             stat_params
           end
  models.each do |config|
    name, params = config.first
    model = params["model"]
    group_by = params["group_by"]
    stat_alias = name
    group_by_values_map = params["group_by_values_map"] || ModelsStats::Statistics.default_group_by_values_map(group_by, model)
    datetime_attr = params["datetime_attr"]
    select_statement = params["select_statement"] || ModelsStats::Statistics::DEFAULT_SELECT_STATEMENT

    stat_for_model = stat_for(model, group_by, datetime_attr, params[:conditions], select_statement)

    if stat_for_model.present?
      stat_for_model = if group_by.present?
        converted_stat = convert_stat(stat_for_model, model, group_by_values_map)
        group_by_values_map.each do |index, value|
          unless converted_stat.keys.map(&:to_s).include?(value.to_s)
            converted_stat[value.to_s] = 0
          end
        end
        converted_stat
      else
        stat_key = if datetime_attr.present?
          "New"
        else
          "Total"
        end
        count = stat_for_model.to_a.first.count
        {stat_key => count.try(:round)}
      end

      ModelsStats::Statistics.write_day(stat_for_model, stat_alias, date)
    end
  end
end

#convert_stat(stat_for_model, model, converter) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/models_stats/statistics_collector.rb', line 48

def convert_stat(stat_for_model, model, converter)
  stat_hash = {}
  stat_for_model.each do |s|
    group_by_attr_value = s.attributes.values[1]
    if [TrueClass, FalseClass].include?(group_by_attr_value.class)
      group_by_attr_value = group_by_attr_value.to_s.to_sym
    end
    key = converter[group_by_attr_value]
    stat_hash[key || group_by_attr_value] = s.count
  end
  stat_hash
end