Class: ActiveReporter::Serializer::Base
- Inherits:
-
Object
- Object
- ActiveReporter::Serializer::Base
show all
- Defined in:
- lib/active_reporter/serializer/base.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(report) ⇒ Base
Returns a new instance of Base.
8
9
10
|
# File 'lib/active_reporter/serializer/base.rb', line 8
def initialize(report)
@report = report
end
|
Instance Attribute Details
#report ⇒ Object
Returns the value of attribute report.
6
7
8
|
# File 'lib/active_reporter/serializer/base.rb', line 6
def report
@report
end
|
Instance Method Details
#axis_summary ⇒ Object
87
88
89
90
91
92
|
# File 'lib/active_reporter/serializer/base.rb', line 87
def axis_summary
y = human_aggregator_label(report.all_aggregators)
xes = report.groupers.map(&method(:human_dimension_label))
count = "#{report.records.count} #{record_type.pluralize(report.records.count, :_gem_active_reporter)}"
"#{y} by #{xes.to_sentence} for #{count}"
end
|
#filter_summary ⇒ Object
94
95
96
97
98
99
100
|
# File 'lib/active_reporter/serializer/base.rb', line 94
def filter_summary
report.filters.flat_map do |dimension|
human_dimension_label(dimension) + " = " + dimension.filter_values.map do |value|
human_dimension_value_label(dimension, value)
end.to_sentence(last_word_connector: ', or ')
end.join('; ')
end
|
#human_aggregator_label(aggregators) ⇒ Object
Consider overriding many of these methods to use I18n with keys based on the aggregators or dimension name.
15
16
17
|
# File 'lib/active_reporter/serializer/base.rb', line 15
def human_aggregator_label(aggregators)
aggregators.keys.collect { |aggregator| aggregator.to_s.humanize }.join(' ')
end
|
#human_aggregator_value_label(aggregator, value) ⇒ Object
27
28
29
|
# File 'lib/active_reporter/serializer/base.rb', line 27
def human_aggregator_value_label(aggregator, value)
value
end
|
#human_category_value_label(dimension, value) ⇒ Object
46
47
48
|
# File 'lib/active_reporter/serializer/base.rb', line 46
def human_category_value_label(dimension, value)
value
end
|
#human_dimension_label(dimension) ⇒ Object
19
20
21
|
# File 'lib/active_reporter/serializer/base.rb', line 19
def human_dimension_label(dimension)
dimension.name.to_s.humanize
end
|
#human_dimension_value_label(dimension, value) ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/active_reporter/serializer/base.rb', line 31
def human_dimension_value_label(dimension, value)
return human_null_value_label(dimension) if value.nil?
case dimension
when ActiveReporter::Dimension::Category
human_category_value_label(dimension, value)
when ActiveReporter::Dimension::Number
human_number_value_label(dimension, value)
when ActiveReporter::Dimension::Time
human_time_value_label(dimension, value)
else
value
end
end
|
#human_null_value_label(dimension) ⇒ Object
23
24
25
|
# File 'lib/active_reporter/serializer/base.rb', line 23
def human_null_value_label(dimension)
"No #{human_dimension_label(dimension)}"
end
|
#human_number_value_label(dimension, value) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/active_reporter/serializer/base.rb', line 50
def human_number_value_label(dimension, value)
case value.bin_edges
when :min_and_max
"[#{value.min.round(2)}, #{value.max.round(2)})"
when :min
">= #{value.min.round(2)}"
when :max
"< #{value.max.round(2)}"
else
human_null_value_label(dimension)
end
end
|
#human_time_value_label(dimension, value) ⇒ Object
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/active_reporter/serializer/base.rb', line 70
def human_time_value_label(dimension, value)
case value.bin_edges
when :min_and_max
time_formats.each { |step, format| return value.min.strftime(format) if value.max == value.min.advance(step => 1) } || "#{value.min} to #{value.max}"
when :min
"after #{value.min}"
when :max
"before #{value.max}"
else
human_null_value_label(dimension)
end
end
|
#record_type ⇒ Object
83
84
85
|
# File 'lib/active_reporter/serializer/base.rb', line 83
def record_type
report.table_name.singularize(:_gem_active_reporter).humanize
end
|
63
64
65
66
67
68
|
# File 'lib/active_reporter/serializer/base.rb', line 63
def time_formats
{
minutes: '%F %k:%M', hours: '%F %k', days: '%F',
weeks: 'week of %F', months: '%Y-%m', years: '%Y'
}
end
|