class ReeValidator::ValidateUrl

def call(url, error = nil, **opts)

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