class ActiveReporter::Serializer::Base
Attributes
report[R]
Public Class Methods
new(report)
click to toggle source
# File lib/active_reporter/serializer/base.rb, line 8 def initialize(report) @report = report end
Public Instance Methods
axis_summary()
click to toggle source
# 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()
click to toggle source
# 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)
click to toggle source
Consider overriding many of these methods to use I18n with keys based on the aggregators or dimension name.
# 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)
click to toggle source
# File lib/active_reporter/serializer/base.rb, line 27 def human_aggregator_value_label(aggregator, value) value end
human_category_value_label(dimension, value)
click to toggle source
# File lib/active_reporter/serializer/base.rb, line 46 def human_category_value_label(dimension, value) value end
human_dimension_label(dimension)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# File lib/active_reporter/serializer/base.rb, line 83 def record_type report.table_name.singularize(:_gem_active_reporter).humanize end
time_formats()
click to toggle source
# 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