1
0
Fork 0
mirror of https://github.com/paper-trail-gem/paper_trail.git synced 2022-11-09 11:33:19 -05:00
paper-trail-gem--paper_trail/lib/paper_trail/attribute_serializers/object_attribute.rb
2017-12-10 23:05:39 -05:00

41 lines
1.1 KiB
Ruby

# frozen_string_literal: true
require "paper_trail/attribute_serializers/cast_attribute_serializer"
module PaperTrail
module AttributeSerializers
# Serialize or deserialize the `version.object` column.
class ObjectAttribute
def initialize(model_class)
@model_class = model_class
end
def serialize(attributes)
alter(attributes, :serialize)
end
def deserialize(attributes)
alter(attributes, :deserialize)
end
private
# Modifies `attributes` in place.
# TODO: Return a new hash instead.
def alter(attributes, serialization_method)
# Don't serialize before values before inserting into columns of type
# `JSON` on `PostgreSQL` databases.
return attributes if object_col_is_json?
serializer = CastAttributeSerializer.new(@model_class)
attributes.each do |key, value|
attributes[key] = serializer.send(serialization_method, key, value)
end
end
def object_col_is_json?
@model_class.paper_trail.version_class.object_col_is_json?
end
end
end
end