Class: ReportsKit::Reports::Data::Generate

Inherits:
Object
  • Object
show all
Defined in:
lib/reports_kit/reports/data/generate.rb

Constant Summary collapse

ROUND_PRECISION =
3

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(properties, context_record: nil, context_params: nil) ⇒ Generate

Returns a new instance of Generate.



9
10
11
12
13
14
15
# File 'lib/reports_kit/reports/data/generate.rb', line 9

def initialize(properties, context_record: nil, context_params: nil)
  self.properties = properties.deep_symbolize_keys
  self.properties = ReportsKit.configuration.default_properties.deep_merge(self.properties) if ReportsKit.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

Instance Attribute Details

#context_recordObject

Returns the value of attribute context_record.



7
8
9
# File 'lib/reports_kit/reports/data/generate.rb', line 7

def context_record
  @context_record
end

#propertiesObject

Returns the value of attribute properties.



7
8
9
# File 'lib/reports_kit/reports/data/generate.rb', line 7

def properties
  @properties
end

Instance Method Details

#performObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/reports_kit/reports/data/generate.rb', line 17

def perform
  data = ReportsKit::Cache.get(properties, context_record)
  return data.deep_symbolize_keys if 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'
  chart_data = format_chart_data(raw_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) if table_or_csv?
  ReportsKit::Cache.set(properties, context_record, data)
  data
end