diff options
-rw-r--r-- | lib/uri/common.rb | 4 | ||||
-rw-r--r-- | test/uri/test_generic.rb | 7 |
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/') |