From ed48bfa5e8770a345424abd7f24f94ea9bbf5973 Mon Sep 17 00:00:00 2001 From: naruse Date: Fri, 1 Dec 2017 15:09:41 +0000 Subject: [PATCH] Append "//" if empty host for file or postgres URI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://url.spec.whatwg.org/#url-serializing > Otherwise, if url’s host is null and url’s scheme is "file", append "//" to output. URL spec doesn't says anything about postgres, but assume the same thing. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60970 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/uri/generic.rb | 2 +- test/uri/test_generic.rb | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb index 2a066a4cb6..044d408f50 100644 --- a/lib/uri/generic.rb +++ b/lib/uri/generic.rb @@ -1341,7 +1341,7 @@ module URI if @opaque str << @opaque else - if @host + if @host || %w[file postgres].include?(@scheme) str << '//' end if self.userinfo diff --git a/test/uri/test_generic.rb b/test/uri/test_generic.rb index aa782db27e..b77717f949 100644 --- a/test/uri/test_generic.rb +++ b/test/uri/test_generic.rb @@ -20,6 +20,10 @@ class URI::TestGeneric < Test::Unit::TestCase str = URI(exp).to_s assert_equal exp, str assert_not_predicate str, :frozen?, '[ruby-core:71785] [Bug #11759]' + + assert_equal "file:///foo", URI("file:///foo").to_s + assert_equal "postgres:///foo", URI("postgres:///foo").to_s + assert_equal "http:/foo", URI("http:///foo").to_s end def test_parse