# File lib/reports_kit/reports/data/format_one_dimension.rb, line 72 def primary_dimension_with_series @primary_dimension_with_series ||= DimensionWithSeries.new(dimension: primary_series.dimensions.first, series: primary_series) end
class ReportsKit::Reports::Data::FormatOneDimension
Attributes
limit[RW]
order[RW]
serieses[RW]
serieses_results[RW]
Public Class Methods
new(serieses_results, order:, limit:)
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 7 def initialize(serieses_results, order:, limit:) self.serieses_results = serieses_results self.serieses = serieses_results.keys self.order = order self.limit = limit end
Public Instance Methods
perform()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 14 def perform { entities: entities, datasets: datasets } end
Private Instance Methods
datasets()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 29 def datasets sorted_serieses_results.map do |series, result| values = result.values.map do |raw_value| Utils.raw_value_to_value(raw_value, series.value_format_method) end { entity: series, values: values } end end
dimension_ids_dimension_instances()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 65 def dimension_ids_dimension_instances @dimension_ids_dimension_instances ||= begin dimension_ids = raw_dimension_keys Utils.dimension_to_dimension_ids_dimension_instances(primary_dimension_with_series, dimension_ids) end end
dimension_keys()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 57 def dimension_keys dimension_summaries.map(&:first) end
dimension_keys_sorted_by_label()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 53 def dimension_keys_sorted_by_label dimension_summaries.sort_by { |key, label| label.is_a?(String) ? label.downcase : label }.map(&:first) end
dimension_summaries()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 41 def dimension_summaries @dimension_summaries ||= raw_dimension_keys.map do |dimension_key| label = Utils.dimension_key_to_label(dimension_key, primary_dimension_with_series, dimension_ids_dimension_instances) next if label.blank? [dimension_key, label] end.compact end
entities()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 23 def entities sorted_dimension_keys.map do |key| Utils.dimension_key_to_entity(key, primary_dimension_with_series, dimension_ids_dimension_instances) end end
filter_dimension_keys_values(dimension_keys_values)
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 134 def filter_dimension_keys_values(dimension_keys_values) dimension_keys_values.select { |key, values| dimension_keys.include?(key) } end
primary_dimension_with_series()
click to toggle source
primary_series()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 76 def primary_series serieses.first end
raw_dimension_keys()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 61 def raw_dimension_keys serieses_results.first.last.keys end
sorted_dimension_keys()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 49 def sorted_dimension_keys sorted_serieses_results.first.last.keys end
sorted_serieses_results()
click to toggle source
# File lib/reports_kit/reports/data/format_one_dimension.rb, line 80 def sorted_serieses_results @sorted_serieses_results ||= begin if order.relation == 'dimension1' && order.field == 'label' sorted_serieses_results = serieses_results.map do |series, dimension_keys_values| dimension_keys_values = filter_dimension_keys_values(dimension_keys_values) sorted_dimension_keys_values = dimension_keys_values.sort_by { |key, _| dimension_keys_sorted_by_label.index(key) } sorted_dimension_keys_values = sorted_dimension_keys_values.reverse if order.direction == 'desc' [series, Hash[sorted_dimension_keys_values]] end elsif (order.relation == 'dimension1' && order.field.nil?) || (order.relation == 0) sorted_serieses_results = serieses_results.map do |series, dimension_keys_values| dimension_keys_values = filter_dimension_keys_values(dimension_keys_values) sorted_dimension_keys_values = dimension_keys_values.sort_by(&:first) sorted_dimension_keys_values = sorted_dimension_keys_values.reverse if order.direction == 'desc' [series, Hash[sorted_dimension_keys_values]] end elsif order.relation.is_a?(Fixnum) series_index = order.relation - 1 raise ArgumentError.new("Invalid order column: #{order.relation}") unless series_index.in?((0..(serieses_results.length - 1))) dimension_keys_values = serieses_results.values.to_a[series_index] sorted_dimension_keys = dimension_keys_values.sort_by(&:last).map(&:first) sorted_dimension_keys = sorted_dimension_keys.reverse if order.direction == 'desc' sorted_serieses_results = serieses_results.map do |series, dimension_keys_values| dimension_keys_values = filter_dimension_keys_values(dimension_keys_values) dimension_keys_values = dimension_keys_values.sort_by { |dimension_key, _| sorted_dimension_keys.index(dimension_key) } [series, Hash[dimension_keys_values]] end elsif order.relation == 'count' dimension_keys_sums = Hash.new(0) serieses_results.values.each do |dimension_keys_values| dimension_keys_values = filter_dimension_keys_values(dimension_keys_values) dimension_keys_values.each do |dimension_key, value| dimension_keys_sums[dimension_key] += value end end sorted_dimension_keys = dimension_keys_sums.sort_by(&:last).map(&:first) sorted_dimension_keys = sorted_dimension_keys.reverse if order.direction == 'desc' sorted_serieses_results = serieses_results.map do |series, dimension_keys_values| dimension_keys_values = filter_dimension_keys_values(dimension_keys_values) dimension_keys_values = dimension_keys_values.sort_by { |dimension_key, _| sorted_dimension_keys.index(dimension_key) } [series, Hash[dimension_keys_values]] end else sorted_serieses_results = serieses_results end if limit sorted_serieses_results = sorted_serieses_results.map do |series, results| [series, Hash[results.to_a.take(limit)]] end end Hash[sorted_serieses_results] end end