Feature #12886
closedURI#merge doesn't handle paths correctly
Description
I feel like this should work.
> URI.parse("/base/uri") + URI.parse("relative")
URI::BadURIError: both URI are relative
The result should be URI with path = "/base/relative".
But it doesn't. It fails with an exception.
There are two ways to fix this. The first is to change the meaning of URI#absolute?
to relate to the absoluteness of the path, not whether or not there is a scheme.
The second way to fix this is to directly work around the issue in merge
.
In my opinion
> URI.parse("a/b") + URI.parse("c")
URI::BadURIError: both URI are relative
should also work, with a result of "a/c".
The need for the LHS of the operation to contain a scheme is not a useful requirement in practice, and in addition, I'd like to state that URI("a/c")
is actually a valid URI. So, it's purely the merge
function being to limited in what it will handle for no obvious reason.
Situations where this comes up: parsing a website which contains relative URLS, and you want to construct absolute URLs.