Domainatrex
Domainatrex is a TLD parsing library for Elixir, using the Public Suffix list.
Read the docs
Installation
Add the following to your mix.exs
defp deps do
[{:domainatrex, "~> 3.0.2"}]
Usage
Domainatrex should be able to handle all valid hostnames, it uses the Public Suffix List and is heavily inspired by the fantastic Domainatrix library for Ruby
iex> Domainatrex.parse("someone.com")
{:ok, %{domain: "someone", subdomain: "", tld: "com"}}
iex> Domainatrex.parse("blog.someone.id.au")
{:ok, %{domain: "someone", subdomain: "blog", tld: "id.au"}}Configuration
For maximum performance, Domainatrex reads the list of all known top-level domains at compile time.
Likewise, by default, the package will attempt to fetch the latest list of TLDs from the web before
falling back to a local (potentially out of date) copy. You can configure this behavior in your
config.exs as follows:
:fetch_latest: A Boolean flag to determine whetherDomainatrexshould try to fetch the latest list of public suffixes at compile time; default istrue:public_suffix_list_url: A charlist URL to the latest public suffix file thatDomainatrexwill try to fetch at compile time; default is'https://raw.githubusercontent.com/publicsuffix/list/master/public_suffix_list.dat':fallback_local_copy: The path to the local suffix file thatDomainatrexwill use if it wasn't able to fetch a fresh file from the URL, or if fetching updated files was disabled; default is the"lib/public_suffix_list.dat"file included in the package.
Here's a complete example of how you might customize this behavior in your confix.exs:
config :domainatrex,
# Explicitly allow compile-time HTTP request to fetch the latest list of TLDs (default)
fetch_latest: true,
# Download the public suffix list from the official source (not necessarily tested with Domainatrex!)
public_suffix_list_url: 'https://publicsuffix.org/list/public_suffix_list.dat',
fallback_local_copy: "priv/my_app_custom_suffix_list.dat"Changelog
3.0.1
-
Resolve warnings about SSL and
Mix.Configbeing deprecated.
3.0.0
-
Breaking change: default to including private domains.
:include_private == falseis still respected (but defaults to false), and a new env var:icann_onlyis added and defaults to false.
2.4.0
-
Support disabling compile time http request with
:fetch_latestconfig (thanks @s3cur3 for the PR!)
2.3.0
- Bump deps
2.2.0
-
Use
Loggerfor logging
2.1.4
-
Pin a version of
nimble_parsecto fix a compilation error onmakeup(makeuphas fixed this downstream, so whenex_docupdatesmakeup, this will no longer be required)
2.1.3
- Merge a couple of minor PRs
2.1.2
- Improve tests and docs slightly
2.1.1
-
Privatise
Domainatrex.match/nandDomainatrex.format_response/2as they are only ever intended for internal use
2.1.0
-
Better handle private domains. Private domains like
*.s3.amazonaws.comare technically classed as TLDs (to my understanding?), it doesn't make a lot of sense to parse them this way. - Fetch a new copy of the public suffix list from The Internet on compile, falling back to a (now updated!) local copy.
2.0.0
-
Change the API from returning explicit results to {:ok, result} or {:error, result}. This is to be more uniform with other libraries I use and for better
withusage. Sorry if this fucks up your day.
1.0.1
-
Fully update the tests to reflect changes in
2.0.0(thanks for the PR @pbonney!)