Class: ReportsKit::Reports::Data::GenerateForProperties

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

Constant Summary collapse

ROUND_PRECISION =
3

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(properties, context_record: nil) ⇒ GenerateForProperties

Returns a new instance of GenerateForProperties.



9
10
11
12
# File 'lib/reports_kit/reports/data/generate_for_properties.rb', line 9

def initialize(properties, context_record: nil)
  self.properties = properties.deep_symbolize_keys
  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_for_properties.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_for_properties.rb', line 7

def properties
  @properties
end

Instance Method Details

#performObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/reports_kit/reports/data/generate_for_properties.rb', line 14

def perform
  if composite_operator
    raise ArgumentError.new('Aggregations require at least one series') if all_serieses.length == 0
    dimension_keys_values = Data::AggregateComposite.new(properties, context_record: context_record).perform
    serieses_dimension_keys_values = { CompositeSeries.new(properties, context_record: context_record) => dimension_keys_values }
  elsif all_serieses.length == 1 && composite_serieses.length == 1
    dimension_keys_values = Data::AggregateComposite.new(composite_serieses.first.properties, context_record: context_record).perform
    serieses_dimension_keys_values = { all_serieses.first => dimension_keys_values }
  elsif all_serieses.length == 1 && all_serieses.first.dimensions.length == 2
    dimension_keys_values = Data::AggregateTwoDimensions.new(all_serieses.first).perform
    serieses_dimension_keys_values = { all_serieses.first => dimension_keys_values }
    serieses_dimension_keys_values = Data::PopulateTwoDimensions.new(serieses_dimension_keys_values).perform
  elsif all_serieses.length > 0
    serieses_dimension_keys_values = serieses_dimension_keys_values_for_one_dimension
  else
    raise ArgumentError.new('The configuration of measurse and dimensions is invalid')
  end

  serieses_dimension_keys_values
end