Class: ActiveReporter::Serializer::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/active_reporter/serializer/base.rb

Direct Known Subclasses

FormField, HashTable, NestedHash, NestedHashWithId, Table

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(report, **options) ⇒ Base

Returns a new instance of Base.



8
9
10
11
# File 'lib/active_reporter/serializer/base.rb', line 8

def initialize(report, **options)
  @report = report
  @options = options
end

Instance Attribute Details

#reportObject (readonly)

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_summaryObject



88
89
90
91
92
93
# File 'lib/active_reporter/serializer/base.rb', line 88

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_summaryObject



95
96
97
98
99
100
101
# File 'lib/active_reporter/serializer/base.rb', line 95

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.



16
17
18
# File 'lib/active_reporter/serializer/base.rb', line 16

def human_aggregator_label(aggregators)
  aggregators.keys.collect { |aggregator| aggregator.to_s.humanize }.join(" ")
end

#human_aggregator_value_label(aggregator, value) ⇒ Object



28
29
30
# File 'lib/active_reporter/serializer/base.rb', line 28

def human_aggregator_value_label(aggregator, value)
  value
end

#human_category_value_label(dimension, value) ⇒ Object



47
48
49
# File 'lib/active_reporter/serializer/base.rb', line 47

def human_category_value_label(dimension, value)
  value
end

#human_dimension_label(dimension) ⇒ Object



20
21
22
# File 'lib/active_reporter/serializer/base.rb', line 20

def human_dimension_label(dimension)
  dimension.name.to_s.humanize
end

#human_dimension_value_label(dimension, value) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/active_reporter/serializer/base.rb', line 32

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



24
25
26
# File 'lib/active_reporter/serializer/base.rb', line 24

def human_null_value_label(dimension)
  "No #{human_dimension_label(dimension)}"
end

#human_number_value_label(dimension, value) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/active_reporter/serializer/base.rb', line 51

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



71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/active_reporter/serializer/base.rb', line 71

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_typeObject



84
85
86
# File 'lib/active_reporter/serializer/base.rb', line 84

def record_type
  report.table_name.singularize(:_gem_active_reporter).humanize
end

#time_formatsObject



64
65
66
67
68
69
# File 'lib/active_reporter/serializer/base.rb', line 64

def time_formats
  {
    minutes: "%F %k:%M", hours: "%F %k", days: "%F",
    weeks: "week of %F", months: "%Y-%m", years: "%Y"
  }
end