Class: Elasticsearch::DSL::Search::Aggregation

Inherits:
Object
  • Object
show all
Defined in:
lib/elasticsearch/dsl/search/aggregation.rb

Overview

Wraps the ‘aggregations` part of a search definition

Instance Method Summary collapse

Constructor Details

#initialize(*args, &block) ⇒ Aggregation

Returns a new instance of Aggregation.



24
25
26
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 24

def initialize(*args, &block)
  @block = block
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object

Looks up the corresponding class for a method being invoked, and initializes it

Raises:

  • (NoMethodError)

    When the corresponding class cannot be found



32
33
34
35
36
37
38
39
40
41
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 32

def method_missing(name, *args, &block)
  klass = Utils.__camelize(name)
  if Aggregations.const_defined? klass
    @value = Aggregations.const_get(klass).new *args, &block
  elsif @block
    @block.binding.eval('self').send(name, *args, &block)
  else
    super
  end
end

Instance Method Details

#aggregation(*args, &block) ⇒ Object

Defines an aggregation nested in another one



45
46
47
48
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 45

def aggregation(*args, &block)
  call
  @value.__send__ :aggregation, *args, &block
end

#aggregationsObject

Returns the aggregations



52
53
54
55
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 52

def aggregations
  call
  @value.__send__ :aggregations
end

#callself

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Evaluates the block passed to initializer, ensuring it is called just once

Returns:

  • (self)


63
64
65
66
67
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 63

def call
  @block.arity < 1 ? self.instance_eval(&@block) : @block.call(self) if @block && ! @_block_called
  @_block_called = true
  self
end

#to_hash(options = {}) ⇒ Hash

Converts the object to a Hash

Returns:

  • (Hash)


73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 73

def to_hash(options={})
  call

  if @value
    case
      when @value.respond_to?(:to_hash)
        @value.to_hash
      else
        @value
    end
  else
    {}
  end
end