Steven Xu Steven Xu - 7 months ago 17
Ruby Question

Is there a Ruby library/gem that will generate a URL based on a set of parameters?

Rails' URL generation mechanism (most of which routes through

polymorphic_url
at some point) allows for the passing of a hash that gets serialized into a query string at least for GET requests. What's the best way to get that sort of functionality, but on top of any base path?

For instance, I'd like to have something like the following:

generate_url('http://www.google.com/', :q => 'hello world')
# => 'http://www.google.com/?q=hello+world'


I could certainly write my own that strictly suits my application's requirements, but if there existed some canonical library to take care of it, I'd rather use that :).

Answer

Yes, in Ruby's standard library you'll find a whole module of classes for working with URI's. There's one for HTTP. You can call #build with some arguments, much like you showed.

http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI/HTTP.html#M009497

For the query string itself, just use Rails' Hash addition #to_query. i.e.

uri = URI::HTTP.build(:host => "www.google.com", :query => { :q => "test" }.to_query)