docbrown/app/validators/valid_domain_csv_validator.rb
2022-01-19 05:25:39 -05:00

16 lines
694 B
Ruby

# @note While the validator implies a CSV, the implementation is that
# we have an array. Upstream implementors likely accept a CSV
# and coerce it into an array. See Authentication::Base for an
# example of coercing the CSV into an array.
class ValidDomainCsvValidator < ActiveModel::EachValidator
VALID_DOMAIN = /^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/
def validate_each(record, attribute, value)
return unless value
return if value.all? { |domain| domain.match?(VALID_DOMAIN) }
record.errors.add(attribute,
options[:message] || I18n.t("validators.valid_domain_csv_validator.invalid_list_format"))
end
end