lib/truemail/configuration.rb in truemail-2.3.4 vs lib/truemail/configuration.rb in truemail-2.4.0
- old
+ new
@@ -13,17 +13,18 @@
connection_timeout
response_timeout
connection_attempts
whitelisted_domains
blacklisted_domains
+ blacklisted_mx_ip_addresses
+ dns
].freeze
attr_reader :verifier_email,
:verifier_domain,
:default_validation_type,
:validation_type_by_domain,
- :dns,
:logger,
*Truemail::Configuration::SETTERS
attr_accessor :whitelist_validation, :not_rfc_mx_lookup_flow, :smtp_fail_fast, :smtp_safe_check
@@ -53,30 +54,25 @@
def validation_type_for=(settings)
validate_validation_type(settings)
validation_type_by_domain.merge!(settings)
end
- def argument_consistent?(argument)
+ def argument_consistent?(method, argument)
case argument
- when ::Array then check_domain_list(argument)
+ when ::Array then items_match_regex?(argument, regex_by_method(method))
when ::Integer then argument.positive?
when ::Regexp then true
end
end
Truemail::Configuration::SETTERS.each do |method|
define_method("#{method}=") do |argument|
- raise_unless(argument, __method__, argument_consistent?(argument))
+ raise_unless(argument, __method__, argument_consistent?(method, argument))
instance_variable_set(:"@#{method}", argument)
end
end
- def dns=(argument)
- raise_unless(argument, __method__, argument.is_a?(::Array) && check_dns_settings(argument))
- @dns = argument
- end
-
def logger=(options)
tracking_event, stdout, log_absolute_path = logger_options(options)
valid_event = Truemail::Log::Event::TRACKING_EVENTS.key?(tracking_event)
stdout_only = stdout && log_absolute_path.nil?
file_only = log_absolute_path.is_a?(::String)
@@ -102,10 +98,11 @@
default_validation_type: Truemail::Configuration::DEFAULT_VALIDATION_TYPE,
validation_type_by_domain: {},
whitelisted_domains: [],
whitelist_validation: false,
blacklisted_domains: [],
+ blacklisted_mx_ip_addresses: [],
dns: [],
not_rfc_mx_lookup_flow: false,
smtp_fail_fast: false,
smtp_safe_check: false
}
@@ -113,44 +110,42 @@
def raise_unless(argument_context, argument_name, condition)
raise Truemail::ArgumentError.new(argument_context, argument_name) unless condition
end
+ def match_regex?(regex_pattern, object)
+ regex_pattern.match?(object.to_s)
+ end
+
def validate_arguments(argument, method)
- constant = Truemail::RegexConstant.const_get("regex_#{method[/\A.+_(.+)=\z/, 1]}_pattern".upcase)
- raise_unless(argument, method, constant.match?(argument.to_s))
+ regex_pattern = Truemail::RegexConstant.const_get("regex_#{method[/\A.+_(.+)=\z/, 1]}_pattern".upcase)
+ raise_unless(argument, method, match_regex?(regex_pattern, argument))
end
def default_verifier_domain
self.verifier_domain ||= verifier_email[Truemail::RegexConstant::REGEX_EMAIL_PATTERN, 3]
end
- def domain_matcher
- ->(domain) { Truemail::RegexConstant::REGEX_DOMAIN_PATTERN.match?(domain.to_s) }
+ def regex_by_method(method)
+ return Truemail::RegexConstant::REGEX_IP_ADDRESS_PATTERN if method.eql?(:blacklisted_mx_ip_addresses)
+ return Truemail::RegexConstant::REGEX_DNS_SERVER_ADDRESS_PATTERN if method.eql?(:dns)
+ Truemail::RegexConstant::REGEX_DOMAIN_PATTERN
end
- def check_domain(domain)
- raise_unless(domain, 'domain', domain_matcher.call(domain))
+ def items_match_regex?(items, regex_pattern)
+ items.all? { |item| match_regex?(regex_pattern, item) }
end
- def check_domain_list(domains)
- domains.all?(&domain_matcher)
- end
-
def check_validation_type(validation_type)
raise_unless(validation_type, 'validation type', Truemail::Validator::VALIDATION_TYPES.include?(validation_type))
end
def validate_validation_type(settings)
raise_unless(settings, 'hash with settings', settings.is_a?(::Hash))
settings.each do |domain, validation_type|
- check_domain(domain)
+ raise_unless(domain, 'domain', match_regex?(Truemail::RegexConstant::REGEX_DOMAIN_PATTERN, domain))
check_validation_type(validation_type)
end
- end
-
- def check_dns_settings(dns_servers)
- dns_servers.all? { |dns_server| Truemail::RegexConstant::REGEX_DNS_SERVER_ADDRESS_PATTERN.match?(dns_server.to_s) }
end
def logger_options(current_options)
Truemail::Configuration::DEFAULT_LOGGER_OPTIONS.merge(current_options).values
end