class ArtirixDataModels::RawAggregationDataNormaliser

Constants

FIND_BUCKETS
FIND_COUNTS
FIND_VALUE
IS_NESTED_COUNTS

Attributes

aggregations_factory[R]
list[R]
raw_aggs[R]

Public Class Methods

new(aggregations_factory, raw_aggs) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 17
def initialize(aggregations_factory, raw_aggs)
  @aggregations_factory = aggregations_factory
  @raw_aggs             = raw_aggs
  @list                 = []
end

Public Instance Methods

call()
Alias for: normalise
normalise() click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 23
def normalise
  return [] unless raw_aggs.present?
  return raw_aggs if Array === raw_aggs

  normalise_hash(raw_aggs)

  list
end
Also aliased as: call

Private Instance Methods

add_normalised_buckets_element_to_list(name, value) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 88
def add_normalised_buckets_element_to_list(name, value)
  buckets = value[:buckets].map do |raw_bucket|
    normalise_bucket(raw_bucket)
  end

  list << { name: name, buckets: buckets }
end
add_normalised_nested_counts_to_list(name, nested) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 100
def add_normalised_nested_counts_to_list(name, nested)
  buckets = nested.map do |bucket_name, nested_value|
    { name: bucket_name.to_s, count: nested_value[:doc_count] }
  end

  list << { name: name, buckets: buckets }

end
add_normalised_value_element_to_list(name, value) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 96
def add_normalised_value_element_to_list(name, value)
  list << { name: name, value: value[:value] }
end
basic_bucket(raw_bucket) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 116
def basic_bucket(raw_bucket)
  name  = raw_bucket[:key_as_string] || raw_bucket[:key] || raw_bucket[:name]
  count = raw_bucket[:doc_count] || raw_bucket[:count]
  { name: name, count: count }
end
deep_locate(object, callable) click to toggle source

aux

# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 123
def deep_locate(object, callable)
  Hashie::Extensions::DeepLocate.deep_locate(callable, object).deep_dup
end
nested_aggs_from(raw_bucket) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 127
def nested_aggs_from(raw_bucket)
  RawAggregationDataNormaliser.new(aggregations_factory, raw_bucket).normalise
end
normalise_bucket(raw_bucket) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 109
def normalise_bucket(raw_bucket)
  basic_bucket(raw_bucket).tap do |bucket|
    nested_aggs           = nested_aggs_from(raw_bucket)
    bucket[:aggregations] = nested_aggs if nested_aggs.present?
  end
end
normalise_element(name, value) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 71
def normalise_element(name, value)
  return unless Hash === value

  if value.key?(:buckets)
    add_normalised_buckets_element_to_list(name, value)
  elsif value.key?(:value)
    add_normalised_value_element_to_list(name, value)
  else
    nested = value.select { |_k, e| IS_NESTED_COUNTS.call e }
    if nested.present?
      add_normalised_nested_counts_to_list(name, nested)
    else
      normalise_hash(value)
    end
  end
end
normalise_hash(hash) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 36
def normalise_hash(hash)
  treat_buckets(hash)
  treat_values(hash)
  treat_counts(hash)
end
treat_buckets(hash) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 42
def treat_buckets(hash)
  with_buckets_list = deep_locate hash, FIND_BUCKETS

  with_buckets_list.each do |with_buckets|
    with_buckets.each do |name, value|
      normalise_element(name, value)
    end
  end
end
treat_counts(hash) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 62
def treat_counts(hash)
  with_values_list = deep_locate hash, FIND_COUNTS
  with_values_list.each do |with_values|
    with_values.each do |name, value|
      normalise_element(name, value)
    end
  end
end
treat_values(hash) click to toggle source
# File lib/artirix_data_models/raw_aggregation_data_normaliser.rb, line 52
def treat_values(hash)
  with_values_list = deep_locate hash, FIND_VALUE

  with_values_list.each do |with_values|
    with_values.each do |name, value|
      normalise_element(name, value)
    end
  end
end