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.