class ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter

:nodoc:

def self.new(subtype)

:nodoc:
def self.new(subtype)
  self === subtype ? subtype : super
end

def ==(other)

def ==(other)
  other.is_a?(self.class) && __getobj__ == other.__getobj__
end

def cast(value)

def cast(value)
  return if value.nil?
  if value.is_a?(Hash)
    set_time_zone_without_conversion(super)
  elsif value.respond_to?(:in_time_zone)
    begin
      super(user_input_in_time_zone(value)) || super
    rescue ArgumentError
      nil
    end
  elsif value.respond_to?(:infinite?) && value.infinite?
    value
  else
    map(super) { |v| cast(v) }
  end
end

def convert_time_to_time_zone(value)

def convert_time_to_time_zone(value)
  return if value.nil?
  if value.acts_like?(:time)
    value.in_time_zone
  elsif value.respond_to?(:infinite?) && value.infinite?
    value
  else
    map(value) { |v| convert_time_to_time_zone(v) }
  end
end

def deserialize(value)

def deserialize(value)
  convert_time_to_time_zone(super)
end

def set_time_zone_without_conversion(value)

def set_time_zone_without_conversion(value)
  ::Time.zone.local_to_utc(value).try(:in_time_zone) if value
end