Sha256: c6b63b1af13af2f4c4ff48d26c58aef55a22be11e97f2f6f3b526f376fbf7317

Contents?: true

Size: 962 Bytes

Versions: 17

Compression:

Stored size: 962 Bytes

Contents

module Elastic::Shims
  class Grouping < Base
    def handle_result(_raw, _formatter)
      chain = extract_aggregation_chain
      groups = group_recursive(super.aggregations, chain)
      Elastic::Results::GroupedResult.new chain, groups
    end

    private

    def extract_aggregation_chain
      child.pick(Elastic::Nodes::Concerns::Aggregable).map do |node|
        bucketed = node.aggregations.find { |n| n.is_a? Elastic::Nodes::Concerns::Bucketed }
        bucketed.try(:name)
      end.reject(&:nil?)
    end

    def group_recursive(_agg_context, _chain, _keys = {}, _groups = [], _idx = 0)
      if _idx < _chain.length
        name = _chain[_idx]
        agg = _agg_context[name] || []
        agg.each do |bucket|
          group_recursive(bucket, _chain, _keys.merge(name => bucket.key), _groups, _idx + 1)
        end
      else
        _groups << Elastic::Results::ResultGroup.new(_keys, _agg_context)
      end

      _groups
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
elastic-rails-1.0.2 lib/elastic/shims/grouping.rb
elastic-rails-1.0.1 lib/elastic/shims/grouping.rb
elastic-rails-1.0.0 lib/elastic/shims/grouping.rb
elastic-rails-0.8.7 lib/elastic/shims/grouping.rb
elastic-rails-0.8.6 lib/elastic/shims/grouping.rb
elastic-rails-0.8.5 lib/elastic/shims/grouping.rb
elastic-rails-0.8.4 lib/elastic/shims/grouping.rb
elastic-rails-0.8.3 lib/elastic/shims/grouping.rb
elastic-rails-0.8.2 lib/elastic/shims/grouping.rb
elastic-rails-0.8.1 lib/elastic/shims/grouping.rb
elastic-rails-0.8.0 lib/elastic/shims/grouping.rb
elastic-rails-0.7.0 lib/elastic/shims/grouping.rb
elastic-rails-0.6.4 lib/elastic/shims/grouping.rb
elastic-rails-0.6.3 lib/elastic/shims/grouping.rb
elastic-rails-0.6.2 lib/elastic/shims/grouping.rb
elastic-rails-0.6.1 lib/elastic/shims/grouping.rb
elastic-rails-0.6.0 lib/elastic/shims/grouping.rb