19 lines
		
	
	
		
			695 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			19 lines
		
	
	
		
			695 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
# NOTE: I initially wrote this as `EmailValidator` but it ended up clashing
 | 
						|
# with an indirect dependency of ours, `validate_email`, which, turns out,
 | 
						|
# has the same approach as we do, but with an extra check disallowing
 | 
						|
# single-label domains. Decided to not switch to `validate_email` because
 | 
						|
# we do want to allow at least `localhost`.
 | 
						|
 | 
						|
class EmailAddressValidator < ActiveModel::EachValidator
 | 
						|
  def validate_each(record, attribute, value)
 | 
						|
    value = value.strip
 | 
						|
 | 
						|
    address = Mail::Address.new(value)
 | 
						|
    record.errors.add(attribute, :invalid) if address.address != value
 | 
						|
  rescue Mail::Field::FieldError
 | 
						|
    record.errors.add(attribute, :invalid)
 | 
						|
  end
 | 
						|
end
 |