Patch by Go MAEDA (@maeda). git-svn-id: https://svn.redmine.org/redmine/trunk@22667 e93f8b46-1217-0410-a6f0-8f06a7374b81pull/145/merge
safe_attributes 'address' | safe_attributes 'address' | ||||
def address=(arg) | def address=(arg) | ||||
write_attribute(:address, arg.to_s.strip) | |||||
normalized_address = arg.to_s.strip | |||||
# Convert internationalized domain name (IDN) to Punycode | |||||
# e.g. 'marie@société.example' => 'marie@xn--socit-esab.example' | |||||
local_part, _at, domain = normalized_address.partition('@') | |||||
if domain.present? | |||||
ascii_domain = Addressable::IDNA.to_ascii(domain) | |||||
normalized_address = "#{local_part}@#{ascii_domain}" | |||||
end | |||||
write_attribute(:address, normalized_address) | |||||
end | end | ||||
def destroy | def destroy |
def test_should_reject_invalid_email | def test_should_reject_invalid_email | ||||
assert_not EmailAddress.new(address: 'invalid,email@example.com').valid? | assert_not EmailAddress.new(address: 'invalid,email@example.com').valid? | ||||
end | end | ||||
def test_should_normalize_idn_email_address | |||||
email = EmailAddress.new(address: 'marie@société.example') | |||||
assert_equal 'marie@xn--socit-esab.example', email.address | |||||
assert email.valid? | |||||
end | |||||
end | end |