Object
# File lib/amq/protocol/table.rb, line 57 57: def self.decode(data) 58: table = Hash.new 59: table_length = data.unpack(PACK_UINT32).first 60: 61: return table if table_length.zero? 62: 63: offset = 4 64: while offset <= table_length 65: key, offset = decode_table_key(data, offset) 66: type, offset = TableValueDecoder.decode_value_type(data, offset) 67: 68: table[key] = case type 69: when TYPE_STRING 70: v, offset = TableValueDecoder.decode_string(data, offset) 71: v 72: when TYPE_INTEGER 73: v, offset = TableValueDecoder.decode_integer(data, offset) 74: v 75: when TYPE_DECIMAL 76: v, offset = TableValueDecoder.decode_big_decimal(data, offset) 77: v 78: when TYPE_TIME 79: v, offset = TableValueDecoder.decode_time(data, offset) 80: v 81: when TYPE_HASH 82: v, offset = TableValueDecoder.decode_hash(data, offset) 83: v 84: when TYPE_BOOLEAN 85: v, offset = TableValueDecoder.decode_boolean(data, offset) 86: v 87: when TYPE_SIGNED_8BIT then raise NotImplementedError.new 88: when TYPE_SIGNED_16BIT then raise NotImplementedError.new 89: when TYPE_SIGNED_64BIT then raise NotImplementedError.new 90: when TYPE_32BIT_FLOAT then 91: v, offset = TableValueDecoder.decode_32bit_float(data, offset) 92: v 93: when TYPE_64BIT_FLOAT then 94: v, offset = TableValueDecoder.decode_64bit_float(data, offset) 95: v 96: when TYPE_VOID 97: nil 98: when TYPE_ARRAY 99: v, offset = TableValueDecoder.decode_array(data, offset) 100: v 101: else 102: raise ArgumentError, "Not a valid type: #{type.inspect}\nData: #{data.inspect}\nUnprocessed data: #{data[offset..-1].inspect}\nOffset: #{offset}\nTotal size: #{table_length}\nProcessed data: #{table.inspect}" 103: end 104: end 105: 106: table 107: end
# File lib/amq/protocol/table.rb, line 126 126: def self.decode_table_key(data, offset) 127: key_length = data.slice(offset, 1).unpack(PACK_CHAR).first 128: offset += 1 129: key = data.slice(offset, key_length) 130: offset += key_length 131: 132: [key, offset] 133: end
# File lib/amq/protocol/table.rb, line 33 33: def self.encode(table) 34: buffer = String.new 35: 36: table ||= {} 37: 38: table.each do |key, value| 39: key = key.to_s # it can be a symbol as well 40: buffer << key.bytesize.chr + key 41: 42: case value 43: when Hash then 44: buffer << TYPE_HASH 45: buffer << self.encode(value) 46: else 47: buffer << TableValueEncoder.encode(value) 48: end 49: end 50: 51: [buffer.bytesize].pack(PACK_UINT32) + buffer 52: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.