Module: MessagePack

Defined in:
lib/right_agent/serialize/message_pack.rb

Overview

Extend MessagePack to conform to load/dump interface of other serializers like JSON and to create internal class objects when they are encountered when unserializing

Class Method Summary collapse

Class Method Details

.create(object) ⇒ Object

Create any msgpack_class objects nested within the unserialized data by calling their associated msgpack_create method

Parameters

object(Object)

Unserialized object that may contain other objects that need to be created

Return

object(Object)

Fully unserialized object

Raises

ArgumentError

If object to be created does not have a msgpack_create method



52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/right_agent/serialize/message_pack.rb', line 52

def self.create(object)
  if object.is_a?(Hash)
    object.each { |k, v| object[k] = create(v) if v.is_a?(Hash) || v.is_a?(Array) }
    if klass_name = object['msgpack_class']
      klass = deep_const_get(klass_name)
      raise ArgumentError, "#{klass_name} missing msgpack_create method" unless klass.respond_to?(:msgpack_create)
      object = klass.msgpack_create(object)
    end
  elsif object.is_a?(Array)
    object = object.map { |v| v.is_a?(Hash) || v.is_a?(Array) ? create(v) : v }
  end
  object
end

.dump(object) ⇒ Object

Serialize object Any non-standard objects must have an associated to_msgpack instance method

Parameters

object(Object)

Object to be serialized

Return

(String)

Serialized object



74
75
76
# File 'lib/right_agent/serialize/message_pack.rb', line 74

def self.dump(object)
  pack(object)
end

.load(data) ⇒ Object

Unserialize data and generate any msgpack_class objects within

Parameters

data(String)

MessagePack string to unserialize

Return

obj(Object)

Unserialized object



37
38
39
# File 'lib/right_agent/serialize/message_pack.rb', line 37

def self.load(data)
  create(unpack(data))
end