Sha256: be97c9e4751dfed1618a3be1696e464607a12598abf318bebae5738197e68217

Contents?: true

Size: 635 Bytes

Versions: 6

Compression:

Stored size: 635 Bytes

Contents

# frozen_string_literal: true

# A custom validator to check that the field value is a URL.
#
#   validates :my_url, url: true
#
class UrlValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    record.errors.add attribute, (options[:message] || "must be a valid URL") unless url_valid?(value)
  end

  # a URL may be technically well-formed but may
  # not actually be valid, so this checks for both.
  def url_valid?(url)
    return true if url.blank?

    url = URI.parse(url)
    (url.is_a?(URI::HTTP) || url.is_a?(URI::HTTPS)) && url.host.present?
  rescue URI::InvalidURIError
    false
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
decidim-core-0.27.3 app/forms/url_validator.rb
decidim-core-0.27.2 app/forms/url_validator.rb
decidim-core-0.27.1 app/forms/url_validator.rb
decidim-core-0.27.0 app/forms/url_validator.rb
decidim-core-0.27.0.rc2 app/forms/url_validator.rb
decidim-core-0.27.0.rc1 app/forms/url_validator.rb