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