# File lib/reports_kits/reports/data/generate.rb, line 138 def primary_dimension serieses.first.dimensions.first end
class ReportsKits::Reports::Data::Generate
Constants
- ROUND_PRECISION
Attributes
context_record[RW]
properties[RW]
Public Class Methods
new(properties, context_record: nil, context_params: nil)
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 9 def initialize(properties, context_record: nil, context_params: nil) self.properties = properties.deep_symbolize_keys self.properties = ReportsKits.configuration.default_properties.deep_merge(self.properties) if ReportsKits.configuration.default_properties self.properties[:context_params] = context_params if context_params self.properties = NormalizeProperties.new(self.properties).perform self.context_record = context_record end
Public Instance Methods
perform()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 17 def perform data = ReportsKits::Cache.get(properties, context_record) return data.deep_symbolize_keys if data data_method_data = ChartDataForDataMethod.new(properties).perform if has_data_method? chart_data = data_method_data ? data_method_data[:formatted_data] : properties_to_chart_data data = { chart_data: chart_data } data = ChartOptions.new(data, options: properties[:chart], inferred_options: inferred_options).perform data[:report_options] = report_options if report_options data = format_table_data(data, data_method_data) if table_or_csv? ReportsKits::Cache.set(properties, context_record, data) data end
Private Instance Methods
csv_data_format_method()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 121 def csv_data_format_method ReportsKits.configuration.custom_method(report_options.try(:[], :csv_data_format_method)) end
data_format_method()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 117 def data_format_method ReportsKits.configuration.custom_method(report_options.try(:[], :data_format_method)) end
format()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 125 def format properties[:format] end
format_chart_data(raw_data)
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 50 def format_chart_data(raw_data) chart_data = {} chart_data[:labels] = raw_data[:entities].map(&:label) chart_data[:datasets] = raw_data[:datasets].map do |raw_dataset| { label: raw_dataset[:entity].label, data: raw_dataset[:values].map(&:formatted) } end chart_data end
format_csv_times(raw_data)
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 129 def format_csv_times(raw_data) return raw_data unless primary_dimension.configured_by_time? raw_data[:entities] = raw_data[:entities].map do |entity| entity.label = Utils.format_csv_time(entity.instance) entity end raw_data end
format_table_data(data, data_method_data)
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 62 def format_table_data(data, data_method_data) data[:type] = format if has_data_method? data[:table_data] = data_method_data[:raw_data] return data end data[:table_data] = Data::FormatTable.new( data.delete(:chart_data), format: format, first_column_label: primary_dimension.try(:label), report_options: report_options ).perform data end
has_data_method?()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 33 def has_data_method? properties[:data_method].present? end
inferred_options()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 146 def inferred_options return {} if has_data_method? { x_axis_label: primary_dimension.label, y_axis_label: serieses.length == 1 ? serieses.first.label : nil } end
inferred_order()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 97 def inferred_order return Order.new('dimension1', nil, 'asc') if primary_dimension.configured_by_time? Order.new('count', nil, 'desc') end
limit()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 93 def limit properties[:limit] end
order()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 86 def order @order ||= begin return Order.parse(properties[:order]) if properties[:order].present? inferred_order end end
primary_dimension()
click to toggle source
properties_to_chart_data()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 37 def properties_to_chart_data if two_dimensions? raw_data = Data::FormatTwoDimensions.new(serieses.first, serieses_results.first.last, order: order, limit: limit).perform else raw_data = Data::FormatOneDimension.new(serieses_results, order: order, limit: limit).perform end raw_data = format_csv_times(raw_data) if format == 'csv' raw_data = Data::AddTableAggregations.new(raw_data, report_options: report_options).perform if table_or_csv? raw_data = data_format_method.call(data: raw_data, properties: properties, context_record: context_record) if data_format_method raw_data = csv_data_format_method.call(data: raw_data, properties: properties, context_record: context_record) if csv_data_format_method && format == 'csv' format_chart_data(raw_data) end
report_options()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 106 def report_options report_options = properties[:report_options] || {} head_rows_count = report_options[:head_rows_count] foot_rows_count = report_options[:foot_rows_count] foot_rows_count ||= report_options[:aggregations].count { |config| config[:from] == 'rows' } if report_options[:aggregations] report_options[:head_rows_count] = head_rows_count if head_rows_count && head_rows_count > 0 report_options[:foot_rows_count] = foot_rows_count if foot_rows_count && foot_rows_count > 0 report_options.presence end
serieses()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 102 def serieses @serieses ||= Series.new_from_properties!(properties, context_record: context_record) end
serieses_results()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 77 def serieses_results @serieses_results ||= GenerateForProperties.new(properties, context_record: context_record).perform end
table_or_csv?()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 142 def table_or_csv? format.in?(%w(table csv)) end
two_dimensions?()
click to toggle source
# File lib/reports_kits/reports/data/generate.rb, line 81 def two_dimensions? dimension_keys = serieses_results.first.last.keys dimension_keys.first.is_a?(Array) end