Sha256: c09679f4076eec6c19beecb5aa564269fba9060ae2e1a56b2d9c94e3b8f4c2c1

Contents?: true

Size: 869 Bytes

Versions: 12

Compression:

Stored size: 869 Bytes

Contents

module Friendly
  class Translator
    RESERVED_ATTRS = [:id, :created_at, :updated_at].freeze

    attr_reader :serializer, :time

    def initialize(serializer = JSON, time = Time)
      @serializer = serializer
      @time       = time
    end

    def to_object(klass, record)
      record.delete(:added_id)
      attributes = serializer.parse(record.delete(:attributes))
      attributes.merge!(record).merge!(:new_record => false)
      klass.new_without_change_tracking attributes
    end

    def to_record(document)
      { :id         => document.id,
        :created_at => document.created_at,
        :updated_at => time.new,
        :attributes => serialize(document) }
    end

    protected
      def serialize(document)
        attrs = document.to_hash.reject { |k,v| RESERVED_ATTRS.include?(k) }
        serializer.generate(attrs)
      end
  end
end

Version data entries

12 entries across 12 versions & 6 rubygems

Version Path
honkster-friendly-0.5.3 lib/friendly/translator.rb
honkster-friendly-0.5.2 lib/friendly/translator.rb
honkster-friendly-0.5.1 lib/friendly/translator.rb
wayne-friendly-0.5.1 lib/friendly/translator.rb
wego-friendly-0.5.1 lib/friendly/translator.rb
arunthampi-friendly-0.5.1 lib/friendly/translator.rb
friendly_postgres-0.5.1 lib/friendly/translator.rb
friendly-0.5.1 lib/friendly/translator.rb
friendly-0.5.0 lib/friendly/translator.rb
friendly_postgres-0.4.5 lib/friendly/translator.rb
friendly-0.4.5 lib/friendly/translator.rb
friendly-0.4.4 lib/friendly/translator.rb