Sha256: 6a67c9ab2f2609d289d01462fd1cd5f8d4626256fc74acbdd408667c1b61ff5b

Contents?: true

Size: 1.45 KB

Versions: 14

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

module ActiveModel
  module Validations
    class UrlValidator < EachValidator
      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

      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

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

        Validators::TLD.host_with_valid_tld?(host)
      end
    end

    module ClassMethods
      # Validates whether or not the specified URL is valid.
      #
      #   class User < ActiveRecord::Base
      #     validates_url_format_of :site
      #
      #     # Validates against a list of valid TLD.
      #     validates_url_format_of :site, tld: true
      #   end
      #
      def validates_url_format_of(*attr_names)
        validates_with UrlValidator, _merge_attributes(attr_names)
      end

      alias_method :validates_url, :validates_url_format_of
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
validators-3.4.2 lib/validators/validates_url_format_of.rb
validators-3.4.1 lib/validators/validates_url_format_of.rb
validators-3.4.0 lib/validators/validates_url_format_of.rb
validators-3.3.0 lib/validators/validates_url_format_of.rb
validators-3.2.1 lib/validators/validates_url_format_of.rb
validators-3.2.0 lib/validators/validates_url_format_of.rb
validators-3.1.1 lib/validators/validates_url_format_of.rb
validators-3.1.0 lib/validators/validates_url_format_of.rb
validators-3.0.5 lib/validators/validates_url_format_of.rb
validators-3.0.4 lib/validators/validates_url_format_of.rb
validators-3.0.3 lib/validators/validates_url_format_of.rb
validators-3.0.2 lib/validators/validates_url_format_of.rb
validators-3.0.1 lib/validators/validates_url_format_of.rb
validators-3.0.0 lib/validators/validates_url_format_of.rb