class Zerial::ImmutableRecordSerializer

Attributes

record_class[R]
serializers[R]

Public Class Methods

new(record_class, serializers: {}) click to toggle source
# File lib/zerial/immutable_record_serializer.rb, line 9
def initialize (record_class, serializers: {})
  @record_class = record_class
  @serializers = serializers
end

Public Instance Methods

as_json(object) click to toggle source
# File lib/zerial/immutable_record_serializer.rb, line 14
def as_json (object)
  record_class::ATTRIBUTES.reduce({}) do |attributes, attr|
    attributes.merge(
      attr.to_s => serializer_for_attribute(attr).as_json(
        object.public_send(attr)
      )
    )
  end
end
from_loaded_json(json) click to toggle source
# File lib/zerial/immutable_record_serializer.rb, line 24
def from_loaded_json (json)
  record_class.new(
    record_class::ATTRIBUTES.reduce({}) { |attributes, attr|
      attributes.merge(
        attr => serializer_for_attribute(attr).from_loaded_json(
          json.fetch(attr.to_s)
        )
      )
    }
  )
end

Private Instance Methods

serializer_for_attribute(attr) click to toggle source
# File lib/zerial/immutable_record_serializer.rb, line 38
def serializer_for_attribute (attr)
  serializers.fetch(attr, DefaultSerializer)
end