class Riddle::Client::Message

This class takes care of the translation of ints, strings and arrays to the format required by the Sphinx service.

Public Class Methods

new() click to toggle source
# File lib/riddle/client/message.rb, line 6
def initialize
  @message = ""
  @size_method = @message.respond_to?(:bytesize) ? :bytesize : :length
end

Public Instance Methods

append(*args) click to toggle source

Append raw data (only use if you know what you’re doing)

# File lib/riddle/client/message.rb, line 12
def append(*args)
  args.each { |arg| @message << arg }
end
append_64bit_int(int) click to toggle source
# File lib/riddle/client/message.rb, line 27
def append_64bit_int(int)
  @message << [int.to_i >> 32, int.to_i & 0xFFFFFFFF].pack('NN')
end
append_64bit_ints(*ints) click to toggle source
# File lib/riddle/client/message.rb, line 45
def append_64bit_ints(*ints)
  ints.each { |int| append_64bit_int(int) }
end
append_array(array) click to toggle source

Append an array of strings - first appends the length of the array, then each item’s length and value.

# File lib/riddle/client/message.rb, line 56
def append_array(array)
  append_int(array.length)
  
  array.each { |item| append_string(item) }
end
append_boolean(bool) click to toggle source
# File lib/riddle/client/message.rb, line 36
def append_boolean(bool)
  append_int(bool ? 1 : 0)
end
append_float(float) click to toggle source

Append a float

# File lib/riddle/client/message.rb, line 32
def append_float(float)
  @message << [float].pack('f').unpack('L*').pack("N")
end
append_floats(*floats) click to toggle source

Append multiple floats

# File lib/riddle/client/message.rb, line 50
def append_floats(*floats)
  floats.each { |float| append_float(float) }
end
append_int(int) click to toggle source

Append an integer

# File lib/riddle/client/message.rb, line 23
def append_int(int)
  @message << [int.to_i].pack('N')
end
append_ints(*ints) click to toggle source

Append multiple integers

# File lib/riddle/client/message.rb, line 41
def append_ints(*ints)
  ints.each { |int| append_int(int) }
end
append_string(str) click to toggle source

Append a string’s length, then the string itself

# File lib/riddle/client/message.rb, line 17
def append_string(str)
  string = Riddle.encode(str.dup, 'ASCII-8BIT')
  @message << [string.send(@size_method)].pack('N') + string
end
to_s() click to toggle source

Returns the entire message

# File lib/riddle/client/message.rb, line 63
def to_s
  @message
end