Uring URIs que tienen llaves, URI :: InvalidURIError: URI malo (¿no es URI?)

Utilizando ruby 1.9.2-p290. Me encontré con un problema al intentar analizar un URI como el siguiente:

require 'uri'
my_uri = "http://www.anyserver.com/getdata?anyparameter={330C-B5A2}"
the_uri = URI.parse(my_uri)

emitir el siguiente error:

URI::InvalidURIError: bad URI(is not URI?)

Requiero una solución diferente a la codificación de las llaves cada vez de esta manera:

new_uri = URI.encode("http://www.anyserver.com/getdata?anyparameter={330C-B5A2}")
=> "http://www.anyserver.com/getdata?anyparameter=%7B330C-B5A2%7D"

Ahora puedo analizar el new_uri como de costumbre, pero tenía que hacer esto cada vez que lo necesitaba. ¿Cuál es la forma más sencilla de lograr esto sin hacerlo siempre?

Publiqué mi propia solución ya que no había visto esto exactamente como lo resolví.

# Accepts URIs when they contain curly braces
# This overrides the DEFAULT_PARSER with the UNRESERVED key, including '{' and '}'
module URI
  def self.parse(uri)
    URI::Parser.new(:UNRESERVED => URI::REGEXP::PATTERN::UNRESERVED + "\{\}").parse(uri)
  end
end

Ahora puedo usar URI.parse (uri) con uri que contiene llaves y no se produce ningún error.

Respuestas a la pregunta(4)

Su respuesta a la pregunta