Sha256: b44cd0aa49dd31283d3758842293ff2d6e3d61df6fc985fd16e7a4b189f44175

Contents?: true

Size: 1.48 KB

Versions: 126

Compression:

Stored size: 1.48 KB

Contents

# frozen_string_literal: true

require 'uri'

class ReeValidator::ValidateUrl
  include Ree::FnDSL

  fn :validate_url do
    link :t, from: :ree_i18n
  end

  UrlErr = Class.new(StandardError)

  contract(
    String,
    Nilor[StandardError],
    Ksplat[
      schemes?: ArrayOf[String],
      ports?: ArrayOf[Integer],
      domains?: ArrayOf[String],
    ] => Bool
  ).throws(UrlErr)
  def call(url, error = nil, **opts)
    begin
      uri = URI.parse(url)

      if opts[:schemes] && (opts[:schemes] & [uri.scheme]).size == 0
        error ||= UrlErr.new(
          t(
            'validator.url.invalid_scheme',
            {schemes: opts[:schemes]},
            default_by_locale: :en
          )
        )

        raise error
      end

      if opts[:ports] && (opts[:ports] & [uri.port]).size == 0
        error ||= UrlErr.new(
          t(
            'validator.url.invalid_port',
            {ports: opts[:ports]},
            default_by_locale: :en
          )
        )

        raise error
      end

      if opts[:domains] && (opts[:domains] & [uri.hostname]).size == 0
        error ||= UrlErr.new(
          t(
            'validator.url.invalid_domain',
            {domains: opts[:domains]},
            default_by_locale: :en
          )
        )

        raise error
      end
    rescue URI::InvalidURIError
      error ||= UrlErr.new(
        t(
          'validator.url.invalid_url',
          default_by_locale: :en
        )
      )

      raise error
    end

    true
  end
end

Version data entries

126 entries across 126 versions & 1 rubygems

Version Path
ree_lib-1.1.1 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.1.0 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.124 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.123 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.122 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.121 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.120 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.119 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.118 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.117 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.116 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.115 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.114 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.113 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.112 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.111 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.110 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.109 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_validator/package/ree_validator/functions/validate_url.rb