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
|