class PaperTrail::TypeSerializers::PostgresArraySerializer

Provides an alternative method of serialization and deserialization of PostgreSQL array columns.

Public Class Methods

new(subtype, delimiter) click to toggle source
# File lib/mongo_trails/type_serializers/postgres_array_serializer.rb, line 8
def initialize(subtype, delimiter)
  @subtype = subtype
  @delimiter = delimiter
end

Public Instance Methods

deserialize(array) click to toggle source
# File lib/mongo_trails/type_serializers/postgres_array_serializer.rb, line 18
def deserialize(array)
  return deserialize_with_ar(array) if active_record_pre_502?

  case array
  # Needed for legacy reasons. If serialized array is a string
  # then it was serialized with Rails < 5.0.2.
  when ::String then deserialize_with_ar(array)
  else array
  end
end
serialize(array) click to toggle source
# File lib/mongo_trails/type_serializers/postgres_array_serializer.rb, line 13
def serialize(array)
  return serialize_with_ar(array) if active_record_pre_502?
  array
end

Private Instance Methods

active_record_pre_502?() click to toggle source
# File lib/mongo_trails/type_serializers/postgres_array_serializer.rb, line 31
def active_record_pre_502?
  ::ActiveRecord.gem_version < Gem::Version.new("5.0.2")
end
deserialize_with_ar(array) click to toggle source
# File lib/mongo_trails/type_serializers/postgres_array_serializer.rb, line 41
def deserialize_with_ar(array)
  ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Array.
    new(@subtype, @delimiter).
    deserialize(array)
end
serialize_with_ar(array) click to toggle source
# File lib/mongo_trails/type_serializers/postgres_array_serializer.rb, line 35
def serialize_with_ar(array)
  ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Array.
    new(@subtype, @delimiter).
    serialize(array)
end