Sha256: 5c404268455d07fea72efd60111359fa4b4bc60e0e798c30a46ef5b26dd31eb1

Contents?: true

Size: 1.2 KB

Versions: 19

Compression:

Stored size: 1.2 KB

Contents

module Elastic::Nodes
  class Term < Base
    include Concerns::Boostable
    include Concerns::FieldQuery

    BOOLEAN_MODE = [:any, :all]

    attr_accessor :field, :mode

    def terms=(_terms)
      @terms = _terms.dup.to_a
    end

    def mode=(_value)
      if !_value.nil? && !BOOLEAN_MODE.include?(_value)
        raise ArgumentError, "invalid mode #{_value}"
      end

      @mode = _value
    end

    def terms
      @terms.each
    end

    def clone
      prepare_clone(super)
    end

    def simplify
      prepare_clone(super)
    end

    def render(_options = {})
      raise ArgumentError, "terms not provided for #{@field}" if !@terms

      if @terms.length == 1
        { 'term' => { render_field(_options) => render_boost('value' => @terms.first) } }
      elsif @mode == :all && !@terms.empty?
        {
          'bool' => render_boost(
            'must' => @terms.map { |t| { 'term' => { render_field(_options) => t } } }
          )
        }
      else
        { 'terms' => render_boost(render_field(_options) => @terms) }
      end
    end

    private

    def prepare_clone(_clone)
      _clone.field = @field
      _clone.terms = @terms
      _clone.mode = @mode
      _clone
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

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