module Invoker::IPC::Message::Serialization

Public Class Methods

included(base) click to toggle source
# File lib/invoker/ipc/message.rb, line 5
def self.included(base)
  base.extend ClassMethods
end

Public Instance Methods

as_json() click to toggle source
# File lib/invoker/ipc/message.rb, line 9
def as_json
  attributes.merge(type: message_type)
end
attributes() click to toggle source
# File lib/invoker/ipc/message.rb, line 33
def attributes
  message_attribute_keys = message_attributes || []
  message_attribute_keys.reduce({}) do |mem, obj|
    value = send(obj)
    if value.is_a?(Array)
      mem[obj] = serialize_array(value)
    elsif value.is_a?(Hash)
      mem[obj] = serialize_hash(value)
    else
      mem[obj] = value.respond_to?(:as_json) ? value.as_json : encode_as_utf(value)
    end
    mem
  end
end
encoded_message() click to toggle source
# File lib/invoker/ipc/message.rb, line 21
def encoded_message
  json_data = to_json
  json_size = json_data.length.to_s
  length_str = json_size.rjust(Invoker::IPC::INITIAL_PACKET_SIZE, '0')
  length_str + json_data
end
eql?(other) click to toggle source
# File lib/invoker/ipc/message.rb, line 28
def eql?(other)
  other.class == self.class &&
    compare_attributes(other)
end
message_attributes() click to toggle source
# File lib/invoker/ipc/message.rb, line 17
def message_attributes
  self.class.message_attributes
end
to_json() click to toggle source
# File lib/invoker/ipc/message.rb, line 13
def to_json
  JSON.generate(as_json)
end

Private Instance Methods

compare_attributes(other) click to toggle source
# File lib/invoker/ipc/message.rb, line 50
def compare_attributes(other)
  message_attributes.all? do |attribute_name|
    send(attribute_name).eql?(other.send(attribute_name))
  end
end
encode_as_utf(value) click to toggle source
# File lib/invoker/ipc/message.rb, line 56
def encode_as_utf(value)
  return value unless value.is_a?(String)
  value.encode("utf-8", invalid: :replace, undef: :replace, replace: '_')
end
serialize_array(attribute_array) click to toggle source
# File lib/invoker/ipc/message.rb, line 61
def serialize_array(attribute_array)
  attribute_array.map do |x|
    x.respond_to?(:as_json) ? x.as_json : encode_as_utf(x)
  end
end
serialize_hash(attribute_hash) click to toggle source
# File lib/invoker/ipc/message.rb, line 67
def serialize_hash(attribute_hash)
  attribute_hash.inject({}) do |temp_mem, (temp_key, temp_value)|
    if temp_value.respond_to?(:as_json)
      temp_mem[temp_key] = temp_value.as_json
    else
      temp_mem[temp_key] = encode_as_utf(temp_value)
    end
  end
end