diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb index f3540a24bb..9ea2335cea 100644 --- a/lib/uri/generic.rb +++ b/lib/uri/generic.rb @@ -1364,6 +1364,9 @@ module URI str << ':' str << @port.to_s end + if (@host || @port) && !@path.empty? && !@path.start_with?('/') + str << '/' + end str << @path if @query str << '?' diff --git a/test/uri/test_generic.rb b/test/uri/test_generic.rb index e6619373c6..8209363b82 100644 --- a/test/uri/test_generic.rb +++ b/test/uri/test_generic.rb @@ -26,6 +26,17 @@ class URI::TestGeneric < Test::Unit::TestCase assert_equal "postgres:///foo", URI("postgres:///foo").to_s assert_equal "http:///foo", URI("http:///foo").to_s assert_equal "http:/foo", URI("http:/foo").to_s + + uri = URI('rel_path') + assert_equal "rel_path", uri.to_s + uri.scheme = 'http' + assert_equal "http:rel_path", uri.to_s + uri.host = 'h' + assert_equal "http://h/rel_path", uri.to_s + uri.port = 8080 + assert_equal "http://h:8080/rel_path", uri.to_s + uri.host = nil + assert_equal "http::8080/rel_path", uri.to_s end def test_parse