Addressabler
Addressabler extends the Addressable::URI class by adding TLD parsing, domain and subdomain parsing, query modification, and restoring setting of nested hashes to query strings.
Install
Install using Rubygems:
gem install addressabler
Then:
require 'rubygems' require 'addressabler'
Addressabler will automatically require addressable/uri
.
Usage
Domain, TLD, and subdomain parsing
Use Addressable::URI
like you normally would:
@uri = Addressable::URI.parse("http://www.google.com/")
@uri.host #=> "www.google.com"
Addressabler will add the following properties:
@uri.tld #=> "com"
@uri.domain #=> "google"
@uri.subdomain #=> "www"
You can set these values, as well:
@uri.tld = "org"
@uri.host #=> "www.google.org"
@uri.domain = "amazon"
@uri.host #=> "www.amazon.org"
@uri.subdomain = "developers"
@uri.host #=> "developers.amazon.org"
Complex TLD support (thanks to Paul Dix!)
Addressabler copies some of Paul Dix's Domaintrix TLD code to support fancy TLDs, as well:
@uri.host = "www.google.co.uk"
@uri.tld #=> "co.uk"
Custom TLDs
You can specify custom TLDs - which aren't actually working TLD's on the internet - for internal usage. One example would be a custom development TLD:
Addressable::URI.custom_tlds = {
'dev' => {}, # mydomain.dev
'bar' => { 'foo' => {} } # mydomain.foo.bar
}
Query interface
Addressabler adds a query_hash
method to Addressable::URI
s. This makes
editing query strings a lot simpler, using a familiar Hash syntax:
@uri.query_hash[:foo] = :bar
@uri.to_s #=> "http://www.google.co.uk/?foo=bar"
Nested hashes in query strings
The current maintainer of Addressable, Bob Aman, feels rather strongly that Rails got it wrong in supporting nested hashes in query strings.
Frankly, I don't disagree with anything he has to say on the issue, but it is a problem many people have experienced.
As such, since Rack already supports building nested hashes "the Rails Way"
(shudder), I added support for assigning nested hashes to URI
s only if Rack
is available. Addressabler will attempt to load Rack::Utils
and, if it finds
it, you can assign a nested hash in the query_hash=
method like so:
@uri.query_hash = {:foo => {:bar => :baz}}
@uri.to_s #=> "http://www.google.co.uk/?foo[bar]=baz"
HANDLE WITH CARE! As Bob explains in the discussion, there's a better alternative to nested hashes in query strings, so try that before you install this library.
That's it. Enjoy.