Current section
Files
Jump to
Current section
Files
lib/countries.ex
defmodule Countries do
@doc """
Returns all countries.
"""
def all do
countries()
end
@doc """
Returns one country gived is alpha2 country code
"""
def get(country_code) do
[country] = filter_by(:alpha2, country_code)
country
end
@doc """
Filters countries by given attribute.
Returns a list of `Countries.Country` structs
## Examples
iex> Countries.filter_by(:region, "Europe")
[%Countries.Country{address_format: nil, alpha2: "VA" ...
iex> Countries.filter_by(:names, "Reino Unido")
[%Countries.Country{address_format: nil, alpha2: "GB" ...
"""
def filter_by(attribute, value) do
Enum.filter(countries(), fn country ->
Map.get(country, attribute)
|> equals_or_contains_in_list(value)
end)
end
defp equals_or_contains_in_list(attribute, value) when is_list(attribute) do
Enum.member?(attribute, value)
end
defp equals_or_contains_in_list(attribute, value) do
attribute == value
end
@doc """
Checks if country for specific attribute and value exists.
Returns boolean
## Examples
iex> Countries.exists?(:name, "Poland")
true
iex> Countries.exists?(:name, "Polande")
false
"""
def exists?(attribue, value) do
filter_by(attribue, value) |> length > 0
end
# -- Load countries from yaml files once on compile time ---
# Ensure :yamerl is running
Application.start(:yamerl)
@countries Countries.Loader.load()
defp countries do
@countries
end
end