class ChewyQuery::Builder::Nodes::Field

Public Class Methods

new(name, *args) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 5
def initialize(name, *args)
  @name = name.to_s
  @args = args
end

Public Instance Methods

!() click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 10
def !
  Nodes::Missing.new(@name)
end
!=(value) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 55
def !=(value)
  case value
  when nil
    Nodes::Exists.new(@name)
  else
    Nodes::Not.new(self == value)
  end
end
!~(value) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 73
def !~(value)
  Not.new(self =~ value)
end
<(value) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 23
def <(value)
  Nodes::Range.new(@name, *__options_merge__(lt: value))
end
<=(value) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 31
def <=(value)
  Nodes::Range.new(@name, *__options_merge__(lt: value, right_closed: true))
end
==(value) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 35
def ==(value)
  case value
  when nil
    Nodes::Missing.new(@name, existence: false, null_value: true)
  when ::Regexp
    Nodes::Regexp.new(@name, value, *@args)
  when ::Range
    Nodes::Range.new(@name, *__options_merge__(gt: value.first, lt: value.last))
  else
    if value.is_a?(Array) && value.first.is_a?(::Range)
      Nodes::Range.new(@name, *__options_merge__(
        gt: value.first.first, lt: value.first.last,
        left_closed: true, right_closed: true
      ))
    else
      Nodes::Equal.new(@name, value, *@args)
    end
  end
end
=~(value) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 64
def =~(value)
  case value
  when ::Regexp
    Nodes::Regexp.new(@name, value, *@args)
  else
    Nodes::Prefix.new(@name, value, @args.extract_options!)
  end
end
>(value) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 19
def >(value)
  Nodes::Range.new(@name, *__options_merge__(gt: value))
end
>=(value) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 27
def >=(value)
  Nodes::Range.new(@name, *__options_merge__(gt: value, left_closed: true))
end
method_missing(method, *args, &block) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 77
def method_missing(method, *args, &block)
  method = method.to_s
  if method =~ /\?\Z/
    Nodes::Exists.new([@name, method.gsub(/\?\Z/, '')].join(?.))
  else
    self.class.new([@name, method].join(?.), *args)
  end
end
to_ary() click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 86
def to_ary
  nil
end
~() click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 14
def ~
  __options_merge__!(cache: true)
  self
end

Private Instance Methods

__options_merge__(additional = {}) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 98
def __options_merge__(additional = {})
  options = @args.extract_options!
  options = options.merge(additional)
  @args + [options]
end
__options_merge__!(additional = {}) click to toggle source
# File lib/chewy_query/builder/nodes/field.rb, line 92
def __options_merge__!(additional = {})
  options = @args.extract_options!
  options = options.merge(additional)
  @args.push(options)
end