提交 d12b30f9 编写于 作者: R Rafael Mendonça França

Merge pull request #15944 from seuros/uuid

Treat invalid uuid as nil

Conflicts:
	activerecord/CHANGELOG.md
* PostgreSQL invalid `uuid` are convert to nil.
*Abdelkader Boudih*
* Restore 4.0 behavior for using serialize attributes with `JSON` as coder.
With 4.1.x, `serialize` started returning a string when `JSON` was passed as
......
......@@ -3,12 +3,21 @@ module ConnectionAdapters
module PostgreSQL
module OID # :nodoc:
class Uuid < Type::Value # :nodoc:
RFC_4122 = %r{\A\{?[a-fA-F0-9]{4}-?
[a-fA-F0-9]{4}-?
[a-fA-F0-9]{4}-?
[1-5][a-fA-F0-9]{3}-?
[8-Bab][a-fA-F0-9]{3}-?
[a-fA-F0-9]{4}-?
[a-fA-F0-9]{4}-?
[a-fA-F0-9]{4}-?\}?\z}x
def type
:uuid
end
def type_cast(value)
value.presence
value.to_s[RFC_4122, 0]
end
end
end
......
......@@ -60,6 +60,43 @@ def test_treat_blank_uuid_as_nil
assert_equal(nil, UUIDType.last.guid)
end
def test_treat_invalid_uuid_as_nil
uuid = UUIDType.create! guid: 'foobar'
assert_equal(nil, uuid.guid)
end
def test_invalid_uuid_dont_modify_before_type_cast
uuid = UUIDType.new guid: 'foobar'
assert_equal 'foobar', uuid.guid_before_type_cast
end
def test_rfc_4122_regex
# Valid uuids
['A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11',
'{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}',
'a0eebc999c0b4ef8bb6d6bb9bd380a11',
'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11',
'{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}'].each do |valid_uuid|
uuid = UUIDType.new guid: valid_uuid
assert_not_nil uuid.guid
end
# Invalid uuids
[['A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11'],
Hash.new,
0,
0.0,
true,
'Z0000C99-9C0B-4EF8-BB6D-6BB9BD380A11',
'{a0eebc99-9c0b-4ef8-fb6d-6bb9bd380a11}',
'a0eebc999r0b4ef8ab6d6bb9bd380a11',
'a0ee-bc99------4ef8-bb6d-6bb9-bd38-0a11',
'{a0eebc99-bb6d6bb9-bd380a11}'].each do |invalid_uuid|
uuid = UUIDType.new guid: invalid_uuid
assert_nil uuid.guid
end
end
def test_uuid_formats
["A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11",
"{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册