class Solr::Query::Request::Filter

Constants

EQUAL_TYPE
NOT_EQUAL_TYPE

Attributes

field[R]
type[R]
value[R]

Public Class Methods

new(type:, field:, value:) click to toggle source
# File lib/solr/query/request/filter.rb, line 14
def initialize(type:, field:, value:)
  @type = type
  @field = field
  @value = value
end

Public Instance Methods

solr_field() click to toggle source
# File lib/solr/query/request/filter.rb, line 24
def solr_field
  solarize_field(@field)
end
solr_value() click to toggle source
# File lib/solr/query/request/filter.rb, line 28
def solr_value
  if value.is_a?(::Array)
    value.map { |v| to_primitive_solr_value(v) }.join(' OR ')
  elsif value.is_a?(::Range)
    to_interval_solr_value(value)
  else
    to_primitive_solr_value(value)
  end
end
to_solr_s() click to toggle source
# File lib/solr/query/request/filter.rb, line 20
def to_solr_s
  "#{solr_prefix}#{solr_field}:(#{solr_value})"
end

Private Instance Methods

date_infinity?(value) click to toggle source
# File lib/solr/query/request/filter.rb, line 60
def date_infinity?(value)
  value.is_a?(DateTime::Infinity)
end
date_or_time?(value) click to toggle source
# File lib/solr/query/request/filter.rb, line 68
def date_or_time?(value)
  return false unless value
  value.is_a?(::Date) || value.is_a?(::Time)
end
numeric_infinity?(value) click to toggle source
# File lib/solr/query/request/filter.rb, line 64
def numeric_infinity?(value)
  value.is_a?(Numeric) && value.infinite?
end
solr_prefix() click to toggle source
# File lib/solr/query/request/filter.rb, line 40
def solr_prefix
  '-' if NOT_EQUAL_TYPE == type
end
to_interval_solr_value(range) click to toggle source
# File lib/solr/query/request/filter.rb, line 44
def to_interval_solr_value(range)
  solr_min = to_primitive_solr_value(range.first)
  solr_max = to_primitive_solr_value(range.last)
  "[#{solr_min} TO #{solr_max}]"
end
to_primitive_solr_value(value) click to toggle source
# File lib/solr/query/request/filter.rb, line 50
def to_primitive_solr_value(value)
  if date_infinity?(value) || numeric_infinity?(value)
    '*'
  elsif date_or_time?(value)
    value.strftime('%Y-%m-%dT%H:%M:%SZ')
  else
    %("#{value.to_s.solr_escape}")
  end
end