Packages

Ports is a collection of United Nations Code for Trade and Transport Locations or known as "UN/LOCODE".

Current section

Files

Jump to
ports lib ports.ex
Raw

lib/ports.ex

defmodule Ports do
@moduledoc """
Module for providing ports related functions.
"""
alias Ports.Loader
# Load during compilation
@ports Loader.load_code_list()
@countries Loader.load_countries()
@function_classifiers Loader.load_functions()
@statuses Loader.load_statuses()
@subdivisions Loader.load_subdivisions()
@doc """
Returns all ports.
"""
def all, do: @ports
@doc """
Returns all countries.
"""
def countries, do: @countries
@doc """
Returns one country given is alpha2 country code.
## Examples
iex> %Ports.Country{name: name} = Ports.get_country("PH")
iex> name
"Philippines"
"""
def get_country(country_code) do
countries()
|> Enum.find(&(&1.code == country_code))
end
@doc """
Returns all functions.
"""
def functions, do: @function_classifiers
@doc """
Returns one function given is function code.
## Examples
iex> %Ports.Function{description: description} = Ports.get_function(4)
iex> description
"Airport"
"""
def get_function(function_code) do
functions()
|> Enum.find(&(String.to_integer(&1.code) == function_code))
end
@doc """
Returns all statuses.
"""
def statuses, do: @statuses
@doc """
Returns one status given is status code.
## Examples
iex> %Ports.Status{description: description} = Ports.get_status("AA")
iex> description
"Approved by competent national government agency"
"""
def get_status(status_code) do
statuses()
|> Enum.find(&(&1.code == status_code))
end
@doc """
Returns all subdivisions.
"""
def subdivisions, do: @subdivisions
@doc """
Returns one subdivision given is subdivision country and code.
## Examples
iex> %Ports.Subdivision{name: name} = Ports.get_subdivision("PH", "00")
iex> name
"National Capital Region (Manila)"
"""
def get_subdivision(country_code, subdivision_code) do
subdivisions()
|> Enum.find(&(&1.country == country_code and &1.code == subdivision_code))
end
end