Parsing a URI of "mailto:?subject=hi" with URI.parse raises an exception. I believe this is a valid "mailto" URI, as defined in RFC6068.
As one of the co-authors of RFC 6068, I have to agree with you. See the first syntax production in https://tools.ietf.org/html/rfc6068#section-2, where the square brackets around 'to' in
mailtoURI = "mailto:" [ to ] [ hfields ]
indicate that the 'to' part can be omitted. This rule is exactly the same as in RFC 2368
(see https://tools.ietf.org/html/rfc2368#section-2), the predecessor of RFC 6068.
Although most 'mailto' URIs will have a 'to' part, it can clearly be useful to have a 'mailto' URI without a 'to' part, e.g. if only cc: and bcc: addressees are present, or for some sample emails where e.g. 'subject' and body are prepared, but each user has to enter the addressees themselves.
In the patch, the regexp you are trying to skip (/\A(?:[^@,;]+@[^@,;]+(?:\z|[,;]))*\z/) already matches the empty string, and skipping the conditional would prevent a InvalidComponentError, it wouldn't affect the NoMethodError you received.