class ActiveModel::Validations::EmailValidator
Constants
- EMAIL_REGEXP
- FINAL_LABEL_REGEXP
- LABEL_REGEXP
- SEGMENT_REGEXP
Public Instance Methods
email_valid?(value)
click to toggle source
# File lib/can_has_validations/validators/email_validator.rb, line 20 def email_valid?(value) return unless value recipient, domain = value.split('@', 2) is_valid = true recipient ||= '' is_valid &&= recipient.length <= 255 is_valid &&= recipient !~ /\.\./ is_valid &&= !recipient.starts_with?('.') is_valid &&= !recipient.ends_with?('.') recipient.split('.').each do |segment| is_valid &&= segment =~ SEGMENT_REGEXP end domain ||= '' if defined?(Addressable::IDNA) domain &&= Addressable::IDNA.to_ascii(domain) end labels = domain.split('.') is_valid &&= domain.length <= 255 is_valid &&= domain !~ /\.\./ is_valid &&= labels.size.in? 2..100 labels.each_with_index do |label, idx| is_valid &&= label.length <= 63 if idx+1==labels.size is_valid &&= label =~ FINAL_LABEL_REGEXP else is_valid &&= label =~ LABEL_REGEXP end end is_valid end
validate_each(record, attribute, value)
click to toggle source
# File lib/can_has_validations/validators/email_validator.rb, line 14 def validate_each(record, attribute, value) unless email_valid?(value) record.errors.add(attribute, :invalid_email, **options.merge(value: value)) end end