summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-12-28 11:36:41 +1300
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2020-03-26 18:06:14 +0900
commit844ff7ea45b79e95eaed4b725fd0cf5c33874058 (patch)
tree37dea6e0b7169683d8ee5509f3acac2dbfc08f3c
parente460c2d033b1e7a95417aa93cb4a3cd5cf57b25c (diff)
[ruby/uri] Simplify construction of URI instances using parser interface.
https://github.com/ruby/uri/commit/c145017dd7
-rw-r--r--lib/uri/common.rb14
-rw-r--r--lib/uri/rfc2396_parser.rb14
-rw-r--r--lib/uri/rfc3986_parser.rb13
3 files changed, 16 insertions, 25 deletions
diff --git a/lib/uri/common.rb b/lib/uri/common.rb
index e3ed405857..799a268b93 100644
--- a/lib/uri/common.rb
+++ b/lib/uri/common.rb
@@ -146,6 +146,20 @@ module URI
end
#
+ # Construct a URI instance, using the scheme to detect the appropriate class
+ # from +URI.scheme_list+.
+ #
+ def self.for(scheme, *arguments, default: Generic)
+ if scheme
+ uri_class = @@schemes[scheme.upcase] || default
+ else
+ uri_class = default
+ end
+
+ return uri_class.new(scheme, *arguments)
+ end
+
+ #
# Base class for all URI exceptions.
#
class Error < StandardError; end
diff --git a/lib/uri/rfc2396_parser.rb b/lib/uri/rfc2396_parser.rb
index 556da20aa2..38c0c36b6d 100644
--- a/lib/uri/rfc2396_parser.rb
+++ b/lib/uri/rfc2396_parser.rb
@@ -208,21 +208,9 @@ module URI
# #=> #<URI::LDAP ldap://ldap.example.com/dc=example?user=john>
#
def parse(uri)
- scheme, userinfo, host, port,
- registry, path, opaque, query, fragment = self.split(uri)
-
- if scheme && URI.scheme_list.include?(scheme.upcase)
- URI.scheme_list[scheme.upcase].new(scheme, userinfo, host, port,
- registry, path, opaque, query,
- fragment, self)
- else
- Generic.new(scheme, userinfo, host, port,
- registry, path, opaque, query,
- fragment, self)
- end
+ URI.for(*self.split(uri), self)
end
-
#
# == Args
#
diff --git a/lib/uri/rfc3986_parser.rb b/lib/uri/rfc3986_parser.rb
index 08539f069a..49a594c17d 100644
--- a/lib/uri/rfc3986_parser.rb
+++ b/lib/uri/rfc3986_parser.rb
@@ -69,18 +69,7 @@ module URI
end
def parse(uri) # :nodoc:
- scheme, userinfo, host, port,
- registry, path, opaque, query, fragment = self.split(uri)
- scheme_list = URI.scheme_list
- if scheme && scheme_list.include?(uc = scheme.upcase)
- scheme_list[uc].new(scheme, userinfo, host, port,
- registry, path, opaque, query,
- fragment, self)
- else
- Generic.new(scheme, userinfo, host, port,
- registry, path, opaque, query,
- fragment, self)
- end
+ URI.for(*self.split(uri), self)
end