diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid/macaddr.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid/macaddr.rb index d0380ea750..13e77c6ab3 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid/macaddr.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid/macaddr.rb @@ -9,10 +9,15 @@ module ActiveRecord :macaddr end - private - def cast_value(value) - value.to_s.downcase - end + def changed?(old_value, new_value, _new_value_before_type_cast) + old_value.class != new_value.class || + new_value && old_value.casecmp(new_value) != 0 + end + + def changed_in_place?(raw_old_value, new_value) + raw_old_value.class != new_value.class || + new_value && raw_old_value.casecmp(new_value) != 0 + end end end end diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid/uuid.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid/uuid.rb index 4548d75e7e..78f05429d8 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid/uuid.rb @@ -7,15 +7,25 @@ module ActiveRecord class Uuid < Type::Value # :nodoc: ACCEPTABLE_UUID = %r{\A(\{)?([a-fA-F0-9]{4}-?){8}(?(1)\}|)\z} - alias_method :serialize, :deserialize + alias :serialize :deserialize def type :uuid end + def changed?(old_value, new_value, _new_value_before_type_cast) + old_value.class != new_value.class || + new_value && old_value.casecmp(new_value) != 0 + end + + def changed_in_place?(raw_old_value, new_value) + raw_old_value.class != new_value.class || + new_value && raw_old_value.casecmp(new_value) != 0 + end + private def cast_value(value) - casted = value.to_s.downcase + casted = value.to_s casted if casted.match?(ACCEPTABLE_UUID) end end