class ArtirixDataModels::AggregationBuilder

Attributes

aggregation_class[R]
aggregations_factory[R]
definition[R]
metric_aggregation_class[R]
value_class[R]

Public Class Methods

new(aggregations_factory:, definition:, aggregation_class: Aggregation, metric_aggregation_class: MetricAggregation, value_class: Aggregation::Value) click to toggle source
# File lib/artirix_data_models/aggregation_builder.rb, line 6
def initialize(aggregations_factory:, definition:, aggregation_class: Aggregation, metric_aggregation_class: MetricAggregation, value_class: Aggregation::Value)
  @aggregations_factory     = aggregations_factory
  @definition               = definition
  @aggregation_class        = aggregation_class
  @metric_aggregation_class = metric_aggregation_class || aggregation_class
  @value_class              = value_class
end

Public Instance Methods

build() click to toggle source
# File lib/artirix_data_models/aggregation_builder.rb, line 14
def build
  if is_metric?
    metric_aggregation_class.new agg_name, value
  else
    aggregation_class.new agg_name, buckets
  end
end
Also aliased as: call
call()
Alias for: build

Private Instance Methods

agg_name() click to toggle source
# File lib/artirix_data_models/aggregation_builder.rb, line 55
def agg_name
  definition[:name].to_sym
end
buckets() click to toggle source
# File lib/artirix_data_models/aggregation_builder.rb, line 33
def buckets
  definition[:buckets].map do |bucket|
    build_bucket(bucket)
  end
end
build_bucket(bucket) click to toggle source
# File lib/artirix_data_models/aggregation_builder.rb, line 39
def build_bucket(bucket)
  name        = bucket[:name]
  count       = bucket[:count]
  nested_aggs = nested_aggs_from(bucket)

  value_class.new agg_name, name, count, nested_aggs
end
is_metric?() click to toggle source
# File lib/artirix_data_models/aggregation_builder.rb, line 25
def is_metric?
  definition.key?(:value) && !definition.key?(:buckets)
end
nested_aggs_from(bucket) click to toggle source
# File lib/artirix_data_models/aggregation_builder.rb, line 47
def nested_aggs_from(bucket)
  raw_nested_aggs = bucket.fetch(:aggregations) { [] }

  raw_nested_aggs.map do |nested_agg|
    aggregations_factory.build_from_json nested_agg, value_class
  end
end
value() click to toggle source
# File lib/artirix_data_models/aggregation_builder.rb, line 29
def value
  definition[:value]
end