summaryrefslogtreecommitdiff
path: root/lib/rubygems/uri_parser.rb
blob: f350edec8c40120b302422f9fdf8d7ee4a91e40b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# frozen_string_literal: true

##
# The UriParser handles parsing URIs.
#

class Gem::UriParser
  ##
  # Parses the #uri, raising if it's invalid

  def parse!(uri)
    raise URI::InvalidURIError unless uri

    # Always escape URI's to deal with potential spaces and such
    # It should also be considered that source_uri may already be
    # a valid URI with escaped characters. e.g. "{DESede}" is encoded
    # as "%7BDESede%7D". If this is escaped again the percentage
    # symbols will be escaped.
    begin
      URI.parse(uri)
    rescue URI::InvalidURIError
      URI.parse(URI::DEFAULT_PARSER.escape(uri))
    end
  end

  ##
  # Parses the #uri, returning the original uri if it's invalid

  def parse(uri)
    parse!(uri)
  rescue URI::InvalidURIError
    uri
  end
end