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.



37
38
39
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 37

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



45
46
47
48
49
50
51
52
53
54
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 45

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



58
59
60
61
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 58

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

#aggregationsObject

Returns the aggregations



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

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)


76
77
78
79
80
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 76

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)


86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/elasticsearch/dsl/search/aggregation.rb', line 86

def to_hash(options={})
  call

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