class Client::Filter

Attributes

attribute[RW]
exclude[RW]
values[RW]

Public Class Methods

new(attribute, values, exclude=false) click to toggle source

Attribute name, values (which can be an array or a range), and whether the filter should be exclusive.

# File lib/riddle/client/filter.rb, line 9
def initialize(attribute, values, exclude=false)
  @attribute, @values, @exclude = attribute, values, exclude
end

Public Instance Methods

exclude?() click to toggle source
# File lib/riddle/client/filter.rb, line 13
def exclude?
  self.exclude
end
query_message() click to toggle source

Returns the message for this filter to send to the Sphinx service

# File lib/riddle/client/filter.rb, line 18
def query_message
  message = Message.new

  message.append_string self.attribute.to_s
  case self.values
  when Range
    if self.values.first.is_a?(Float) && self.values.last.is_a?(Float)
      message.append_int FilterTypes[:float_range]
      message.append_floats self.values.first, self.values.last
    else
      message.append_int FilterTypes[:range]
      append_integer_range message, self.values
    end
  when Array
    if self.values.first.is_a?(Float) && self.values.length == 1
      message.append_int FilterTypes[:float_range]
      message.append_floats self.values.first, self.values.first
    else
      message.append_int FilterTypes[:values]
      message.append_int self.values.length
      append_array message, self.values
    end
  end
  message.append_int self.exclude? ? 1 : 0

  message.to_s
end

Private Instance Methods

append_array(message, array) click to toggle source
# File lib/riddle/0.9.9/client/filter.rb, line 11
def append_array(message, array)
  message.append_64bit_ints *array.collect { |val|
    case val
    when TrueClass
      1
    when FalseClass
      0
    else
      val
    end
  }
end
append_integer_range(message, range) click to toggle source
# File lib/riddle/0.9.9/client/filter.rb, line 7
def append_integer_range(message, range)
  message.append_64bit_ints self.values.first, self.values.last
end