Sha256: c44c6cf84af665a7bff91425778a4a60d73a718f26a7d4706adc6fd3db7b2f96

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

require "valid_email2/address"
require "active_model"
require "active_model/validations"

module ValidEmail2
  class EmailValidator < ActiveModel::EachValidator
    def default_options
      { regex: true, disposable: false, mx: false, disallow_subaddressing: false }
    end

    def validate_each(record, attribute, value)
      return unless value.present?
      options = default_options.merge(self.options)

      address = ValidEmail2::Address.new(value)

      error(record, attribute) && return unless address.valid?

      if options[:disallow_subaddressing]
        error(record, attribute) && return if address.subaddressed?
      end

      if options[:disposable]
        error(record, attribute) && return if address.disposable?
      end

      if options[:disposable_domain]
        error(record, attribute) && return if address.disposable_domain?
      end

      if options[:disposable_with_whitelist]
        error(record, attribute) && return if address.disposable? && !address.whitelisted?
      end

      if options[:blacklist]
        error(record, attribute) && return if address.blacklisted?
      end

      if options[:mx]
        error(record, attribute) && return unless address.valid_mx?
      end
    end

    def error(record, attribute)
      record.errors.add(attribute, options[:message] || :invalid)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
valid_email2-3.1.3 lib/valid_email2/email_validator.rb