class PaperTrail::AttributeSerializers::ObjectAttribute

Serialize or deserialize the `version.object` column.

Public Class Methods

new(model_class) click to toggle source
# File lib/mongo_trails/attribute_serializers/object_attribute.rb, line 9
def initialize(model_class)
  @model_class = model_class
end

Public Instance Methods

deserialize(attributes) click to toggle source
# File lib/mongo_trails/attribute_serializers/object_attribute.rb, line 17
def deserialize(attributes)
  alter(attributes, :deserialize)
end
serialize(attributes) click to toggle source
# File lib/mongo_trails/attribute_serializers/object_attribute.rb, line 13
def serialize(attributes)
  alter(attributes, :serialize)
end

Private Instance Methods

alter(attributes, serialization_method) click to toggle source

Modifies `attributes` in place. TODO: Return a new hash instead.

# File lib/mongo_trails/attribute_serializers/object_attribute.rb, line 25
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
object_col_is_json?() click to toggle source
# File lib/mongo_trails/attribute_serializers/object_attribute.rb, line 36
def object_col_is_json?
  @model_class.paper_trail.version_class.object_col_is_json?
end