Class: ActiveModel::Validations::UrlValidator

Inherits:
EachValidator
  • Object
show all
Defined in:
lib/validators/validates_url_format_of.rb

Instance Method Summary collapse

Instance Method Details

#url?(url) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/validators/validates_url_format_of.rb', line 19

def url?(url)
  uri = URI(url)
  regex = if options[:tld]
            Validators::URL_FORMAT_WITHOUT_TLD_VALIDATION
          else
            Validators::URL_FORMAT
          end

  uri.is_a?(URI::HTTP) &&
    url.match(regex) &&
    valid_tld?(uri.host)
rescue URI::InvalidURIError
  false
end

#valid_tld?(host) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
# File 'lib/validators/validates_url_format_of.rb', line 34

def valid_tld?(host)
  return true unless options[:tld]

  Validators::TLD.host_with_valid_tld?(host)
end

#validate_each(record, attribute, value) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/validators/validates_url_format_of.rb', line 6

def validate_each(record, attribute, value)
  return if value.blank? && options[:allow_blank]
  return if value.nil? && options[:allow_nil]
  return if url?(value.to_s)

  record.errors.add(
    attribute,
    :invalid_url,
    message: options[:message],
    value: value
  )
end