Parse the registered domain name from a URL.
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.gitignore
.rspec
Gemfile
LICENSE.txt
README.md
Rakefile
domainator.gemspec

README.md

Domainator

Extract the registered domain name from a URI.

Installation

Add this line to your application's Gemfile:

gem 'domainator'

And then execute:

$ bundle

Or install it yourself as:

$ gem install domainator

Usage

Parsing Domains

There are two approaches to parsing domains with Domainator: Domainator.parse and Domainator#parse.

Domainator.parse

Call the Domainator.parse method with a URI object or parseable URI string.

Domainator.parse('http://www.google.com')
# => "google.com"

uri = URI.parse('http://maps.google.co.uk/map?foo=bar')
Domainator.parse(uri)
# => "google.co.uk"

Domainator.parse('http://10.0.0.1')
# => Domainator::NotFoundError: no matching domain for "http://10.0.0.1"

A second parameter can alternatively be passed to define the known extensions. This parameter should be an Enumerable (optimally a Set) in which each extension contains the leading dot. By default, this value is set to Domainator.default_extensions.

extensions = %w[.com .net .co.uk].to_set

Domainator.parse('http://www.google.com', extensions)
# => "google.com"

Domainator.parse('http://www.google.ca', extensions)
# => Domainator::NotFoundError: no matching domain for "http://www.google.ca"

If a domain is found, then a string will be returned. Otherwise, one of the following errors will be raised:

  • ArgumentError: the URI param was not passed in as a String or URI, or the URI param does not include a host, or the extensions param was not passed in as an Enumerable.
  • URI::InvalidURIError: the URI was passed in as a String and cannot be parsed.
  • Domainator::NotFoundError: the URI does not contain a valid domain name.

Domainator#parse

Instantiate a Domainator object by passing in an optional set of valid domain extensions. By default, this value is set to Domainator.default_extensions.

domainator = Domainator.new
# => #<Domainator:0x007fda8428a8f0 @extensions=#<Set: {".ac", ".com.ac", ".gov.ac", ".mil.ac", ... }>>

domainator = Domainator.new(%w[.com .net].to_set)
# => #<Domainator:0x007fda823861c0 @extensions=#<Set: {".com", ".net"}>>

Once instantiated, call the #parse method with a URI object or parseable URI string.

domainator.parse('http://www.google.com')
# => "google.com"

domainator.parse('http://www.google.foo')
# => Domainator::NotFoundError: no matching domain for "http://www.google.foo"

Domain Extensions

To see the list of domain extensions built into the gem, call the Domainator.default_extensions method.

Domainator.default_extensions
# => #<Set: {".ac", ".com.ac", ".gov.ac", ".mil.ac", ... }>

You can manually add to and remove from this list via the Set#add (Set#<<) and Set#delete methods.

Domainator.default_extensions.include? '.foo'
# => false
Domainator.default_extensions.include? '.com'
# => true

Domainator.default_extensions << '.foo'
Domainator.default_extensions.delete('.com')

Domainator.default_extensions.include? '.foo'
# => true
Domainator.default_extensions.include? '.com'
# => false

Known Issues

This gem does not currently work with domains that require right-to-left language support.

Contributing

  1. Fork it ( https://github.com/[my-github-username]/domainator/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request