defmodule Ports do @moduledoc """ Module for providing ports related functions. """ alias Ports.Loader @doc """ Returns all ports. """ def all do Loader.load_code_list() end @doc """ Returns all countries. """ def countries do Loader.load_countries() end @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 Loader.load_countries() |> Enum.find(&(&1.code == country_code)) end @doc """ Returns all functions. """ def functions do Loader.load_functions() end @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 Loader.load_functions() |> Enum.find(&(String.to_integer(&1.code) == function_code)) end @doc """ Returns all statuses. """ def statuses do Loader.load_statuses() end @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 Loader.load_statuses() |> Enum.find(&(&1.code == status_code)) end @doc """ Returns all subdivisions. """ def subdivisions do Loader.load_subdivisions() end @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 Loader.load_subdivisions() |> Enum.find(&(&1.country == country_code and &1.code == subdivision_code)) end end