Sha256: 87d15675ff8300a73128b44975b46f932e8e4e09d85107002c1a01d29c8e8d6f

Contents?: true

Size: 1.55 KB

Versions: 6

Compression:

Stored size: 1.55 KB

Contents

module Elastic::Dsl
  module MetricBuilder
    def average(_field, _options = {})
      aggregate_metric(Elastic::Nodes::Agg::Average, _field, _options, 'avg_%s')
    end

    def sum(_field, _options = {})
      aggregate_metric(Elastic::Nodes::Agg::Sum, _field, _options, 'sum_%s')
    end

    def minimum(_field, _options = {})
      aggregate_metric(Elastic::Nodes::Agg::Minimum, _field, _options, 'min_%s')
    end

    def maximum(_field, _options = {})
      aggregate_metric(Elastic::Nodes::Agg::Maximum, _field, _options, 'max_%s')
    end

    def stats(_field, _options = {})
      aggregate_metric(Elastic::Nodes::Agg::Stats, _field, _options, '%s_stats')
    end

    def opening(_field, _options = {})
      by = _options.delete :by
      raise ArgumentError, 'must provide a sorting column' if by.nil?

      aggregate_metric(Elastic::Nodes::Agg::Top, _field, _options, 'open_%s') do |node|
        node.add_sort(by, order: :asc)
      end
    end

    def closing(_field, _options = {})
      by = _options.delete :by
      raise ArgumentError, 'must provide a sorting column' if by.nil?

      aggregate_metric(Elastic::Nodes::Agg::Top, _field, _options, 'close_%s') do |node|
        node.add_sort(by, order: :desc)
      end
    end

    private

    def aggregate_metric(_klass, _field, _options, _default_name, &_block)
      # TODO: detect nested name and wrap node
      name = _options.delete(:as) || sprintf(_default_name, _field)
      node = _klass.build(name, _field, _options)
      _block.call node unless _block.nil?
      aggregate node
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
elastic-rails-1.0.3 lib/elastic/dsl/metric_builder.rb
elastic-rails-1.0.2 lib/elastic/dsl/metric_builder.rb
elastic-rails-1.0.1 lib/elastic/dsl/metric_builder.rb
elastic-rails-1.0.0 lib/elastic/dsl/metric_builder.rb
elastic-rails-0.8.7 lib/elastic/dsl/metric_builder.rb
elastic-rails-0.8.6 lib/elastic/dsl/metric_builder.rb