lib/email_inquire/inquirer.rb
# frozen_string_literal: true
require "email_inquire/helper"
require "email_inquire/response"
require "email_inquire/validator/common_provider"
require "email_inquire/validator/common_provider_mistake"
require "email_inquire/validator/commonly_mistaken_domain"
require "email_inquire/validator/commonly_mistaken_tld"
require "email_inquire/validator/country_code_tld"
require "email_inquire/validator/custom_invalid_domain"
require "email_inquire/validator/custom_valid_domain"
require "email_inquire/validator/email_format"
require "email_inquire/validator/known_invalid_domain"
require "email_inquire/validator/one_time_provider"
require "email_inquire/validator/unique_domain_provider"
module EmailInquire
class Inquirer
VALIDATORS = [
# Format first
EmailInquire::Validator::EmailFormat,
# Custom overrides
EmailInquire::Validator::CustomValidDomain,
EmailInquire::Validator::CustomInvalidDomain,
# Always valid domains
EmailInquire::Validator::CommonProvider,
# Invalid domains
EmailInquire::Validator::KnownInvalidDomain,
EmailInquire::Validator::OneTimeProvider,
# Hints
EmailInquire::Validator::CommonProviderMistake,
EmailInquire::Validator::CommonlyMistakenDomain,
EmailInquire::Validator::CommonlyMistakenTld,
EmailInquire::Validator::CountryCodeTld,
EmailInquire::Validator::UniqueDomainProvider,
].freeze
def initialize(email)
@email = email&.downcase
end
attr_reader :email
def validate
response = Helper.first_value(VALIDATORS) { |validator| validator.validate(email) }
response || Response.new(email: email).valid!
end
end
end