aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2021-07-28 12:26:31 +0200
committerBenoit Daloze <eregontp@gmail.com>2021-07-28 12:26:31 +0200
commit59a65f2d2402e0d34d9232236f152d62e74f9483 (patch)
tree2b5731c91047ffd4e4617f4023fd38fbfd02c407
parent71945ad827efe0bf62bbf87b5528206aabbd4022 (diff)
downloadruby-59a65f2d2402e0d34d9232236f152d62e74f9483.tar.gz
Update to latest uri
* https://github.com/ruby/uri/commit/bc47bf71df2b2e9cea09d0b2684ceac7355e42a0 * To include the fix from https://github.com/ruby/uri/pull/27
-rw-r--r--lib/uri/common.rb4
-rw-r--r--test/uri/test_generic.rb7
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/uri/common.rb b/lib/uri/common.rb
index 2bb13adf23..26b179add2 100644
--- a/lib/uri/common.rb
+++ b/lib/uri/common.rb
@@ -91,8 +91,8 @@ module URI
const_name = scheme.to_s.upcase
uri_class = INITIAL_SCHEMES[const_name]
- if !uri_class && !const_name.empty? && Schemes.const_defined?(const_name, false)
- uri_class = Schemes.const_get(const_name, false)
+ uri_class ||= if /\A[A-Z]\w*\z/.match?(const_name) && Schemes.const_defined?(const_name, false)
+ Schemes.const_get(const_name, false)
end
uri_class ||= default
diff --git a/test/uri/test_generic.rb b/test/uri/test_generic.rb
index d122587031..fdb405e396 100644
--- a/test/uri/test_generic.rb
+++ b/test/uri/test_generic.rb
@@ -159,6 +159,13 @@ class URI::TestGeneric < Test::Unit::TestCase
assert_equal(nil, url.userinfo)
end
+ def test_parse_scheme_with_symbols
+ # Valid schemes from https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
+ assert_equal 'ms-search', URI.parse('ms-search://localhost').scheme
+ assert_equal 'microsoft.windows.camera', URI.parse('microsoft.windows.camera://localhost').scheme
+ assert_equal 'coaps+ws', URI.parse('coaps+ws:localhost').scheme
+ end
+
def test_merge
u1 = URI.parse('http://foo')
u2 = URI.parse('http://foo/')