class EmailValidator
Validator for email
Public Instance Methods
allow_idn?()
click to toggle source
check the options for idn support
# File lib/rails_email_validator.rb, line 13 def allow_idn? options[:allow_idn].nil? or options[:allow_idn] == true end
convert_idn(domain_part)
click to toggle source
convert an unicode domain_part to asccii for validation
# File lib/rails_email_validator.rb, line 28 def convert_idn(domain_part) if allow_idn? # idn suport if available begin require 'idn' # encode domain part return IDN::Idna.toASCII(domain_part) rescue LoadError rescue IDN::Idna::IdnaError end end domain_part end
has_mx?(domain)
click to toggle source
validate if an mx exists on domain
# File lib/rails_email_validator.rb, line 18 def has_mx?(domain) require 'resolv' mx = [] Resolv::DNS.open do |dns| mx = dns.getresources(domain, Resolv::DNS::Resource::IN::MX) end not mx.nil? and mx.size > 0 end
validate_each(record, attribute, value)
click to toggle source
main validator for email
# File lib/rails_email_validator.rb, line 43 def validate_each(record, attribute, value) unless value.blank? # pre var valid = true local_part = nil domain_part = nil if valid # split local and domain part (local_part, domain_part) = value.to_s.split('@', 2) end domain_part = convert_idn domain_part if valid # check syntax valid = false unless local_part =~ /\A[a-z0-9!\#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!\#$%&'*+\/=?^_`{|}~-]+)*\Z/i valid = false unless domain_part =~ /\A(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\Z/i end # check mx if valid and validate_mx? valid = false unless has_mx? domain_part end # email valid record.errors.add(attribute, :invalid) unless valid end end
validate_mx?()
click to toggle source
check the options for do mx validation
# File lib/rails_email_validator.rb, line 8 def validate_mx? options[:validate_mx].nil? or options[:validate_mx] == true end