Class: Repor::Serializers::BaseSerializer
- Inherits:
-
Object
- Object
- Repor::Serializers::BaseSerializer
show all
- Includes:
- ActionView::Helpers::TextHelper
- Defined in:
- lib/repor/serializers/base_serializer.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of BaseSerializer.
8
9
10
|
# File 'lib/repor/serializers/base_serializer.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/repor/serializers/base_serializer.rb', line 6
def report
@report
end
|
Instance Method Details
#axis_summary ⇒ Object
94
95
96
97
98
99
|
# File 'lib/repor/serializers/base_serializer.rb', line 94
def axis_summary
y = human_aggregator_label(report.aggregator)
xes = report.groupers.map(&method(:human_dimension_label))
count = pluralize(report.records.count, record_type)
"#{y} by #{xes.to_sentence} for #{count}"
end
|
#filter_summary ⇒ Object
101
102
103
104
105
106
107
|
# File 'lib/repor/serializers/base_serializer.rb', line 101
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(aggregator) ⇒ Object
Consider overriding many of these methods to use I18n with keys based on the aggregator or dimension name.
15
16
17
|
# File 'lib/repor/serializers/base_serializer.rb', line 15
def human_aggregator_label(aggregator)
aggregator.name.to_s.humanize
end
|
#human_aggregator_value_label(aggregator, value) ⇒ Object
27
28
29
|
# File 'lib/repor/serializers/base_serializer.rb', line 27
def human_aggregator_value_label(aggregator, value)
value
end
|
#human_category_value_label(dimension, value) ⇒ Object
46
47
48
|
# File 'lib/repor/serializers/base_serializer.rb', line 46
def human_category_value_label(dimension, value)
value
end
|
#human_dimension_label(dimension) ⇒ Object
19
20
21
|
# File 'lib/repor/serializers/base_serializer.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/repor/serializers/base_serializer.rb', line 31
def human_dimension_value_label(dimension, value)
return human_null_value_label(dimension) if value.nil?
case dimension
when Repor::Dimensions::CategoryDimension
human_category_value_label(dimension, value)
when Repor::Dimensions::NumberDimension
human_number_value_label(dimension, value)
when Repor::Dimensions::TimeDimension
human_time_value_label(dimension, value)
else
value
end
end
|
#human_null_value_label(dimension) ⇒ Object
23
24
25
|
# File 'lib/repor/serializers/base_serializer.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
62
63
64
65
|
# File 'lib/repor/serializers/base_serializer.rb', line 50
def human_number_value_label(dimension, value)
begin
min, max = value.values_at(:min, :max)
rescue
min, max = value.min, value.max
end
if min && max
"[#{min.round(2)}, #{max.round(2)})"
elsif min
">= #{min.round(2)}"
elsif max
"< #{max.round(2)}"
else
human_null_value_label(dimension)
end
end
|
#human_time_value_label(dimension, value) ⇒ Object
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/repor/serializers/base_serializer.rb', line 74
def human_time_value_label(dimension, value)
min, max = value.min, value.max
if min && max
time_formats.each do |step, format|
return min.strftime(format) if max == min.advance(step => 1)
end
"#{min} to #{max}"
elsif min
"after #{min}"
elsif max
"before #{max}"
else
human_null_value_label(dimension)
end
end
|
#record_type ⇒ Object
90
91
92
|
# File 'lib/repor/serializers/base_serializer.rb', line 90
def record_type
report.table_name.singularize.humanize
end
|
67
68
69
70
71
72
|
# File 'lib/repor/serializers/base_serializer.rb', line 67
def time_formats
{
minutes: '%F %k:%M', hours: '%F %k', days: '%F',
weeks: 'week of %F', months: '%Y-%m', years: '%Y'
}
end
|