class Ignite::Response

Attributes

client[R]

Public Class Methods

new(client) click to toggle source
# File lib/ignite/response.rb, line 5
def initialize(client)
  @client = client

  # use buffer so errors don't leave unread data on socket
  len = client.read(SIZE_INT).unpack1(PACK_INT)
  @buffer = StringIO.new(client.read(len))
end

Public Instance Methods

read(len) click to toggle source
# File lib/ignite/response.rb, line 13
def read(len)
  @buffer.read(len)
end
read_bool() click to toggle source
# File lib/ignite/response.rb, line 45
def read_bool
  read_byte != 0
end
read_bool_array() click to toggle source
# File lib/ignite/response.rb, line 78
def read_bool_array
  read_byte_array.map { |v| v != 0 }
end
read_byte() click to toggle source
# File lib/ignite/response.rb, line 17
def read_byte
  read(SIZE_BYTE).unpack1(PACK_BYTE)
end
read_byte_array() click to toggle source
# File lib/ignite/response.rb, line 66
def read_byte_array
  read_array(SIZE_BYTE, PACK_BYTE)
end
read_char() click to toggle source
# File lib/ignite/response.rb, line 41
def read_char
  read(SIZE_CHAR).unpack1(PACK_CHAR)
end
read_data_object() click to toggle source
# File lib/ignite/response.rb, line 109
def read_data_object
  type_code = read_byte
  case type_code
  when TYPE_BYTE
    read_byte
  when TYPE_SHORT
    read_short
  when TYPE_INT
    read_int
  when TYPE_LONG
    read_long
  when TYPE_FLOAT
    read_float
  when TYPE_DOUBLE
    read_double
  when TYPE_CHAR
    read_char
  when TYPE_BOOL
    read_bool
  when TYPE_STRING
    read_string
  when TYPE_DATE
    read_date
  when TYPE_BYTE_ARRAY
    read_byte_array
  when TYPE_LONG_ARRAY
    read_long_array
  when TYPE_DOUBLE_ARRAY
    read_double_array
  when TYPE_BOOL_ARRAY
    read_bool_array
  when TYPE_DECIMAL
    read_decimal
  when TYPE_TIMESTAMP
    read_timestamp
  when TYPE_NULL
    nil
  else
    raise Error, "Type not supported yet: #{type_code}. Please create an issue."
  end
end
read_date() click to toggle source
# File lib/ignite/response.rb, line 60
def read_date
  msecs_since_epoch = read_long
  sec = msecs_since_epoch / 1000
  Time.at(sec).to_date
end
read_decimal() click to toggle source

same as Python

# File lib/ignite/response.rb, line 83
def read_decimal
  scale = read_int
  length = read_int
  data = read(length).unpack("C*")

  sign = (data[0] & 0x80) != 0
  data[0] = data[0] & 0x7f

  result = 0
  data.reverse.each_with_index do |v, i|
    result += v * 0x100 ** i
  end

  result = result / BigDecimal("10") ** BigDecimal(scale)
  result = -result if sign
  result
end
read_double() click to toggle source
# File lib/ignite/response.rb, line 37
def read_double
  read(SIZE_DOUBLE).unpack1(PACK_DOUBLE)
end
read_double_array() click to toggle source
# File lib/ignite/response.rb, line 74
def read_double_array
  read_array(SIZE_DOUBLE, PACK_DOUBLE)
end
read_float() click to toggle source
# File lib/ignite/response.rb, line 33
def read_float
  read(SIZE_FLOAT).unpack1(PACK_FLOAT)
end
read_int() click to toggle source
# File lib/ignite/response.rb, line 25
def read_int
  read(SIZE_INT).unpack1(PACK_INT)
end
read_long() click to toggle source
# File lib/ignite/response.rb, line 29
def read_long
  read(SIZE_LONG).unpack1(PACK_LONG)
end
read_long_array() click to toggle source
# File lib/ignite/response.rb, line 70
def read_long_array
  read_array(SIZE_LONG, PACK_LONG)
end
read_short() click to toggle source
# File lib/ignite/response.rb, line 21
def read_short
  read(SIZE_SHORT).unpack1(PACK_SHORT)
end
read_string() click to toggle source
# File lib/ignite/response.rb, line 49
def read_string
  len = read_int
  read(len)
end
read_string_object() click to toggle source
# File lib/ignite/response.rb, line 54
def read_string_object
  type = read_byte
  raise Error, "Expected string, not type #{type}" unless type == TYPE_STRING
  read_string
end
read_timestamp() click to toggle source
# File lib/ignite/response.rb, line 101
def read_timestamp
  msecs_since_epoch = read_long
  msec_fraction_in_nsecs = read_int
  sec = msecs_since_epoch / 1000
  nsec = (msecs_since_epoch % 1000) * 1000000 + msec_fraction_in_nsecs
  Time.at(sec, nsec, :nanosecond)
end

Private Instance Methods

read_array(size, pack) click to toggle source
# File lib/ignite/response.rb, line 153
def read_array(size, pack)
  len = read_int
  read(len * size).unpack("#{pack}*")
end