From: Go MAEDA Date: Fri, 20 Sep 2024 01:58:08 +0000 (+0000) Subject: Replace custom email normalization logic with Rails' `normalizes` method (#29208). X-Git-Tag: 6.0.0~134 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=52deba3abf4753777d189b379df3acec723c7bce;p=redmine.git Replace custom email normalization logic with Rails' `normalizes` method (#29208). git-svn-id: https://svn.redmine.org/redmine/trunk@23064 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/email_address.rb b/app/models/email_address.rb index 8b9ecd415..69ae8a066 100644 --- a/app/models/email_address.rb +++ b/app/models/email_address.rb @@ -36,21 +36,19 @@ class EmailAddress < ApplicationRecord :if => Proc.new {|email| email.address_changed? && email.address.present?} validate :validate_email_domain, :if => proc {|email| email.address.present?} - safe_attributes 'address' - - def address=(arg) - normalized_address = arg.to_s.strip - - # Convert internationalized domain name (IDN) to Punycode - # e.g. 'marie@société.example' => 'marie@xn--socit-esab.example' + normalizes :address, with: lambda { |address| + normalized_address = address.to_s.strip local_part, _at, domain = normalized_address.partition('@') if domain.present? + # Convert internationalized domain name (IDN) to Punycode + # e.g. 'marie@société.example' => 'marie@xn--socit-esab.example' ascii_domain = Addressable::IDNA.to_ascii(domain) normalized_address = "#{local_part}@#{ascii_domain}" end + normalized_address + } - write_attribute(:address, normalized_address) - end + safe_attributes 'address' def destroy if is_default?