Sha256: b3aa5b1e74ea46c8a6903baebde491c5f5cc4691d5c36ed4c96c073844d7f655

Contents?: true

Size: 777 Bytes

Versions: 3

Compression:

Stored size: 777 Bytes

Contents

module Chronicle::Serialization
  class JSONAPISerializer < Chronicle::Serialization::Serializer
    def serializable_hash
      identifier_hash.merge({
        attributes: attribute_hash,
        relationships: associations_hash,
        meta: @record.meta
      })
    end

    private

    def identifier_hash
      {
        type: @record.class::TYPE,
        id: @record.id
      }.compact
    end

    def attribute_hash
      @record.attributes.compact
    end

    def associations_hash
      @record.associations.map do |k, v|
        if v.is_a?(Array)
          [k, { data: v.map{|record| JSONAPISerializer.new(record).serializable_hash} }]
        else
          [k, { data: JSONAPISerializer.new(v).serializable_hash }]
        end
      end.to_h
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
chronicle-core-0.2.2 lib/chronicle/serialization/jsonapi_serializer.rb
chronicle-core-0.2.1 lib/chronicle/serialization/jsonapi_serializer.rb
chronicle-core-0.2.0 lib/chronicle/serialization/jsonapi_serializer.rb