Class: EmailAddress::ActiveRecordValidator

Inherits:
ActiveModel::Validator
  • Object
show all
Defined in:
lib/email_address/active_record_validator.rb

Overview

ActiveRecord validator class for validating an email address with this library. Note the initialization happens once per process.

Usage:

validates_with EmailAddress::ActiveRecordValidator, field: :name

Options:

  • field: email,

  • fields: [:email1, :email2]

  • code: custom error code (default: :invalid_address)

  • message: custom error message (default: “Invalid Email Address”)

Default field: :email or :email_address (first found)

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ ActiveRecordValidator

Returns a new instance of ActiveRecordValidator.



22
23
24
# File 'lib/email_address/active_record_validator.rb', line 22

def initialize(options = {})
  @opt = options
end

Instance Method Details

#field_value(r, f) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/email_address/active_record_validator.rb', line 50

def field_value(r, f)
  if r.respond_to?(f)
    r.send(f)
  elsif r[f]
    r[f]
  else
    nil
  end
rescue NoMethodError
  nil
end

#validate(r) ⇒ Object



26
27
28
29
30
31
32
33
34
# File 'lib/email_address/active_record_validator.rb', line 26

def validate(r)
  if @opt[:fields]
    @opt[:fields].each { |f| validate_email(r, f) }
  elsif @opt[:field]
    validate_email(r, @opt[:field])
  else
    validate_email(r, :email) || validate_email(r, :email_address)
  end
end

#validate_email(r, f) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/email_address/active_record_validator.rb', line 36

def validate_email(r, f)
  v = field_value(r, f)
  return if v.nil?

  e = Address.new(v)
  unless e.valid?
    error_code = @opt[:code] || :invalid_address
    error_message = @opt[:message] ||
      Config.error_message(:invalid_address, I18n.locale.to_s) ||
      "Invalid Email Address"
    r.errors.add(f, error_code, message: error_message)
  end
end