From 6b855f3623670efece8aa375770cd8bf6e53d151 Mon Sep 17 00:00:00 2001 From: "Ruy R." <108208+ruyrocha@users.noreply.github.com> Date: Mon, 26 Aug 2024 22:52:32 -0300 Subject: [PATCH] Fix `TimeZoneConverter#==` method, so objects will be properly... compared by their type, scale, limit & precision. --- .../attribute_methods/time_zone_conversion.rb | 7 +++++++ .../postgresql/oid/timestamp.rb | 7 ------- .../postgresql/postgresql_adapter_test.rb | 9 --------- .../time_zone_converter_test.rb | 20 +++++++++++++++++++ 4 files changed, 27 insertions(+), 16 deletions(-) create mode 100644 activerecord/test/cases/attribute_methods/time_zone_converter_test.rb diff --git a/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb b/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb index a37c3074226bb..27e83ec6dd207 100644 --- a/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb +++ b/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb @@ -32,6 +32,13 @@ def cast(value) end end + def ==(other) + precision == other.precision && + scale == other.scale && + limit == other.limit && + type == other.type + end + private def convert_time_to_time_zone(value) return if value.nil? diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid/timestamp.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid/timestamp.rb index 726a47d01a83e..e6326ab0d558c 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/oid/timestamp.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid/timestamp.rb @@ -8,13 +8,6 @@ class Timestamp < DateTime # :nodoc: def type real_type_unless_aliased(:timestamp) end - - def ==(other) - precision == other.precision && - scale == other.scale && - limit == other.limit && - type == other.type - end end end end diff --git a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb index e55afecd80a64..ddbb2471b5bd0 100644 --- a/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb +++ b/activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb @@ -715,15 +715,6 @@ def test_disable_extension_without_schema @connection.execute("DROP EXTENSION IF EXISTS hstore") end - def test_time_zone_converter_equals_to_timestamp - subtype = ActiveRecord::ConnectionAdapters::PostgreSQL::OID::Timestamp.new - value = ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter.new(subtype) - - value_from_cache = Marshal.load(Marshal.dump(value)) - - assert_equal value, value_from_cache - end - private def with_postgresql_apdater_decode_dates PostgreSQLAdapter.decode_dates = true diff --git a/activerecord/test/cases/attribute_methods/time_zone_converter_test.rb b/activerecord/test/cases/attribute_methods/time_zone_converter_test.rb new file mode 100644 index 0000000000000..5c22113e1de53 --- /dev/null +++ b/activerecord/test/cases/attribute_methods/time_zone_converter_test.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +require "cases/helper" +require "active_support/core_ext/enumerable" + +module ActiveRecord + module AttributeMethods + module TimeZoneConversion + class TimeZoneConverterTest < ActiveRecord::TestCase + def test_with_date_time_type + subtype = ActiveRecord::Type::DateTime.new + value = ActiveRecord::AttributeMethods::TimeZoneConversion::TimeZoneConverter.new(subtype) + value_from_cache = Marshal.load(Marshal.dump(value)) + + assert_equal value, value_from_cache + end + end + end + end +end