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, **options) ⇒ Base
Returns a new instance of Base.
10
11
12
13
|
# File 'lib/active_reporter/serializer/base.rb', line 10
def initialize(report, **options)
@report = report
@options = options
end
|
Instance Attribute Details
#report ⇒ Object
Returns the value of attribute report.
8
9
10
|
# File 'lib/active_reporter/serializer/base.rb', line 8
def report
@report
end
|
Instance Method Details
#axis_summary ⇒ Object
90
91
92
93
94
95
|
# File 'lib/active_reporter/serializer/base.rb', line 90
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
97
98
99
100
101
102
103
|
# File 'lib/active_reporter/serializer/base.rb', line 97
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.
18
19
20
|
# File 'lib/active_reporter/serializer/base.rb', line 18
def human_aggregator_label(aggregators)
aggregators.keys.collect { |aggregator| aggregator.to_s.humanize }.join(" ")
end
|
#human_aggregator_value_label(aggregator, value) ⇒ Object
30
31
32
|
# File 'lib/active_reporter/serializer/base.rb', line 30
def human_aggregator_value_label(aggregator, value)
value
end
|
#human_category_value_label(dimension, value) ⇒ Object
49
50
51
|
# File 'lib/active_reporter/serializer/base.rb', line 49
def human_category_value_label(dimension, value)
value
end
|
#human_dimension_label(dimension) ⇒ Object
22
23
24
|
# File 'lib/active_reporter/serializer/base.rb', line 22
def human_dimension_label(dimension)
dimension.name.to_s.humanize
end
|
#human_dimension_value_label(dimension, value) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/active_reporter/serializer/base.rb', line 34
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
26
27
28
|
# File 'lib/active_reporter/serializer/base.rb', line 26
def human_null_value_label(dimension)
"No #{human_dimension_label(dimension)}"
end
|
#human_number_value_label(dimension, value) ⇒ Object
53
54
55
56
57
58
59
60
61
62
63
64
|
# File 'lib/active_reporter/serializer/base.rb', line 53
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
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/active_reporter/serializer/base.rb', line 73
def human_time_value_label(dimension, value)
case value.bin_edges
when :min_and_max
time_formats.detect { |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
86
87
88
|
# File 'lib/active_reporter/serializer/base.rb', line 86
def record_type
report.table_name.singularize(:_gem_active_reporter).humanize
end
|
66
67
68
69
70
71
|
# File 'lib/active_reporter/serializer/base.rb', line 66
def time_formats
{
minutes: "%F %k:%M", hours: "%F %k", days: "%F",
weeks: "week of %F", months: "%Y-%m", years: "%Y"
}
end
|