From ec8e35ed7aee392dcf66bda3b467c5680d3cc7b4 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Wed, 22 Jan 2025 21:26:26 +0200 Subject: [PATCH] fix email typo --- lib/submissions.rb | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/lib/submissions.rb b/lib/submissions.rb index 86988d09..3e1ccace 100644 --- a/lib/submissions.rb +++ b/lib/submissions.rb @@ -107,20 +107,24 @@ module Submissions def normalize_email(email) return if email.blank? - return email.downcase if email.to_s.include?(',') - return email.downcase if email.to_s.include?('.gob') - return email.downcase if email.to_s.include?('.om') - return email.downcase if email.to_s.include?('.mm') - return email.downcase if email.to_s.include?('.cm') - return email.downcase if email.to_s.include?('.et') - return email.downcase if email.to_s.include?('.mo') - return email.downcase if email.to_s.include?('.nz') - return email.downcase if email.to_s.include?('.za') - return email.downcase unless email.to_s.include?('.') + + return email.downcase if email.to_s.include?(',') || + email.to_s.match?(/\.(?:gob|om|mm|cm|et|mo|nz|za|ie)\z/) || + email.to_s.exclude?('.') fixed_email = EmailTypo.call(email.delete_prefix('<')) - Rails.logger.info("Fixed email #{email.split('@').last}") if fixed_email != email.downcase.delete_prefix('<').strip + return fixed_email if fixed_email == email + + domain = email.to_s.split('@').last.to_s.downcase + + if DidYouMean::Levenshtein.distance(domain, fixed_email.to_s.split('@').last) > 3 + Rails.logger.info("Skipped email fix #{domain}") + + return email.downcase + end + + Rails.logger.info("Fixed email #{domain}") if fixed_email != email.downcase.delete_prefix('<').strip fixed_email end