module Philotic::Serialization::Serializer

Public Instance Methods

dump(payload, metadata) click to toggle source
# File lib/philotic/serialization/serializer.rb, line 26
def dump(payload, metadata)
  _transform(:dump, payload, metadata)
end
factory(serialization) click to toggle source
# File lib/philotic/serialization/serializer.rb, line 12
def factory(serialization)
  serialization = serialization.to_s.downcase.to_sym
  serializers[serialization]
end
load(payload, metadata) click to toggle source

return the fully deserialized payload

# File lib/philotic/serialization/serializer.rb, line 22
def load(payload, metadata)
  _transform(:load, payload, metadata)
end
register(serializer) click to toggle source
# File lib/philotic/serialization/serializer.rb, line 17
def register(serializer)
  serializers[serializer.serialization] = serializer
end
serializers() click to toggle source
# File lib/philotic/serialization/serializer.rb, line 8
def serializers
  @serializers ||= {}
end

Private Instance Methods

_transform(dump_or_load, payload, metadata) click to toggle source
# File lib/philotic/serialization/serializer.rb, line 31
def _transform(dump_or_load, payload, metadata)
  headers = Marshal.load(Marshal.dump(metadata[:headers])).deep_symbolize_keys

  serializations = headers[:philotic_serializations]

  serializations.reverse! if(dump_or_load == :load)

  serializations.reduce(payload.dup) do |transformed, serialization|
    serializer = factory serialization
    (serializer &&
      serializer.public_send(dump_or_load, transformed, metadata)) || transformed
  end
end