Packages

The country, language & currency utility functions inspired by https://github.com/OpenBookPrices/country-data/.

Current section

Files

Jump to
country_data lib country_data.ex
Raw

lib/country_data.ex

defmodule CountryData do
@moduledoc """
The country, language & currency utility functions.
Usage:
1) retrieve all country data
iex> [country | _rest] = CountryData.all_countries()
iex> country["alpha2"]
"AC"
You can also retrieve all languages, all currencies, all regions.
2) search by certain fields
iex> [us] = CountryData.search_countries_by_alpha2("US")
iex> us["name"]
"United States"
iex> [cn] = CountryData.search_countries_by_name("Canada")
iex> cn["alpha3"]
"CAN"
iex> countries = CountryData.search_countries_by_currencies("EUR")
iex> length(countries)
41
iex> [russian] = CountryData.search_languages_by_name("Russian")
iex> russian
%{"alpha2" => "ru", "alpha3" => "rus", "bibliographic" => "", "name" => "Russian"}
iex> [jpy] = CountryData.search_currencies_by_code("JPY")
iex> jpy
%{"code" => "JPY", "decimals" => 0, "name" => "Japanese yen", "number" => "392"}
iex> [nor] = CountryData.search_regions_by_name("Northern America")
iex> nor["countries"]
["BM", "CA", "GL", "MX", "PM", "US"]
There are more utility functions for use. See docs for further information.
"""
alias CountryData.Server
:country_data
|> Application.get_env(:supported_data)
|> Enum.map(fn name ->
fun_name = :"all_#{name}"
@doc """
Retrieve all data for #{name}
"""
def unquote(fun_name)(), do: Server.fetch_all(unquote(name))
end)
:country_data
|> Application.get_env(:search_interfaces)
|> Enum.map(fn {name, key} ->
fun_name = :"search_#{name}_by_#{key}"
@doc """
Search all #{name} by its field #{key}
"""
def unquote(fun_name)(value), do: Server.search(unquote(name), unquote(key), value)
end)
end