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