class UrlValidator

Public Instance Methods

validate_each(record, attribute, value) click to toggle source
# File lib/active_validation/validators/url_validator.rb, line 9
def validate_each(record, attribute, value)
  uri = URI.parse(value.to_s)
  raise URI::InvalidURIError unless valid?(uri, options)
rescue URI::InvalidURIError
  record.errors[attribute] <<
    (options[:message] || I18n.t('active_validation.errors.messages.url'))
end

Private Instance Methods

valid?(value, options) click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

# File lib/active_validation/validators/url_validator.rb, line 42
def valid?(value, options)
  valid_length?(value) &&
    valid_uri?(value) &&
    valid_domain?(value, [*(options[:domain])]) &&
    valid_scheme?(value, [*(options[:scheme] || UrlValidator::DEFAULT_SCHEMES)]) &&
    (options[:root] ? valid_root?(value) : true)
end
valid_domain?(value, options) click to toggle source
# File lib/active_validation/validators/url_validator.rb, line 19
def valid_domain?(value, options)
  value_downcased = value.host.to_s.downcase
  options.empty? || options.any? { |dom| value_downcased.end_with?(".#{dom.downcase}") }
end
valid_length?(value) click to toggle source
# File lib/active_validation/validators/url_validator.rb, line 24
def valid_length?(value)
  value.present?
end
valid_root?(value) click to toggle source
# File lib/active_validation/validators/url_validator.rb, line 33
def valid_root?(value)
  ['/', ''].include?(value.path) && value.query.blank? && value.fragment.blank?
end
valid_scheme?(value, options) click to toggle source
# File lib/active_validation/validators/url_validator.rb, line 28
def valid_scheme?(value, options)
  value_downcased = value.scheme.to_s.downcase
  options.empty? || options.any? { |sch| value_downcased == sch.to_s.downcase }
end
valid_uri?(value) click to toggle source
# File lib/active_validation/validators/url_validator.rb, line 37
def valid_uri?(value)
  value.is_a?(URI::Generic)
end