Addressable is a replacement for the URI implementation that is part of Ruby’s standard library. It more closely conforms to the relevant RFCs and adds support for IRIs and URI templates.

Example usage:

require 'addressable/uri'

uri = Addressable::URI.parse("http://example.com/path/to/resource/")
uri.scheme
#=> "http"
uri.host
#=> "example.com"
uri.path
#=> "/path/to/resource/"

Addressable::URI.expand_template("http://example.com/{-list|+|query}/", {
  "query" => "an example query".split(" ")
})
#=> #<Addressable::URI:0xc9d95c URI:http://example.com/an+example+query/>

uri = Addressable::URI.parse("http://www.詹姆斯.com/")
uri.normalize
#=> #<Addressable::URI:0xc9a4c8 URI:http://www.xn--8ws00zhy3a.com/>