Skip to content

Commit e0f7ac1

Browse files
taketo1113rafal-brize
authored andcommitted
Fix PostgreSQL Cidr#change?: comparing '0.0.0.0'/'::' to nil
Co-authored-by: Rafał Brize <[email protected]>
1 parent 32e549a commit e0f7ac1

File tree

2 files changed

+9
-1
lines changed
  • activerecord
    • lib/active_record/connection_adapters/postgresql/oid
    • test/cases/adapters/postgresql

2 files changed

+9
-1
lines changed

activerecord/lib/active_record/connection_adapters/postgresql/oid/cidr.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def serialize(value)
3131
# TODO: Remove when IPAddr#== compares IPAddr#prefix. See
3232
# https://github.com/ruby/ipaddr/issues/21
3333
def changed?(old_value, new_value, _new_value_before_type_cast)
34-
super || !old_value.nil? && old_value.prefix != new_value.prefix
34+
!old_value.eql?(new_value) || !old_value.nil? && old_value.prefix != new_value.prefix
3535
end
3636

3737
def cast_value(value)

activerecord/test/cases/adapters/postgresql/cidr_test.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ class CidrTest < ActiveRecord::PostgreSQLTestCase
2929
assert type.changed?("192.168.0.0/24", nil, "")
3030
assert type.changed?(nil, "192.168.0.0/24", "")
3131
assert type.changed?("192.168.0.0/24", "192.168.0.0/25", "")
32+
assert type.changed?(IPAddr.new("192.168.0.0/24"), nil, "")
33+
assert type.changed?(nil, IPAddr.new("192.168.0.0/24"), "")
34+
assert type.changed?(IPAddr.new("192.168.0.0/24"), IPAddr.new("192.168.0.0/25"), "")
35+
36+
assert type.changed?(IPAddr.new("0.0.0.0"), nil, "")
37+
assert type.changed?(nil, IPAddr.new("0.0.0.0"), "")
38+
assert type.changed?(IPAddr.new("::"), nil, "")
39+
assert type.changed?(nil, IPAddr.new("::"), "")
3240
end
3341
end
3442
end

0 commit comments

Comments
 (0)