class ActiveRecord::Coders::ColumnSerializer

:nodoc:
:nodoc:

def assert_valid_value(object, action:)

Public because it's called by Type::Serialized
def assert_valid_value(object, action:)
  unless object.nil? || object_class === object
    raise SerializationTypeMismatch,
      "can't #{action} `#{@attr_name}`: was supposed to be a #{object_class}, but was a #{object.class}. -- #{object.inspect}"
  end
end

def check_arity_of_constructor

def check_arity_of_constructor
  load(nil)
rescue ArgumentError
  raise ArgumentError, "Cannot serialize #{object_class}. Classes passed to `serialize` must have a 0 argument constructor."
end

def dump(object)

def dump(object)
  return if object.nil?
  assert_valid_value(object, action: "dump")
  coder.dump(object)
end

def init_with(coder) # :nodoc:

:nodoc:
def init_with(coder) # :nodoc:
  @attr_name = coder["attr_name"]
  @object_class = coder["object_class"]
  @coder = coder["coder"]
end

def initialize(attr_name, coder, object_class = Object)

def initialize(attr_name, coder, object_class = Object)
  @attr_name = attr_name
  @object_class = object_class
  @coder = coder
  check_arity_of_constructor
end

def load(payload)

def load(payload)
  if payload.nil?
    if @object_class != ::Object
      return @object_class.new
    end
    return nil
  end
  object = coder.load(payload)
  assert_valid_value(object, action: "load")
  object ||= object_class.new if object_class != Object
  object
end