Current section
Files
Jump to
Current section
Files
lib/moeda.ex
defmodule Moeda do
@moduledoc """
Documentation for Moeda.
"""
@moedas %{
BRL: %{nome: "Brazilian Real", simbolo: "R$", codigo: "BRL", codigo_iso: 986, expoente: 2},
USD: %{nome: "US Dollar", simbolo: "$", codigo: "USD", codigo_iso: 840, expoente: 2}
}
@spec find(String.t() | atom) :: map | nil
@doc """
Return a map from an atom or string that represents an ISO 4217 code.
## Examples
iex> Moeda.find(:BRL)
%{ nome: "Brazilian Real", simbolo: "R$", codigo: "BRL", codigo_iso: 986, expoente: 2 }
iex> Moeda.find("BRL")
%{ nome: "Brazilian Real", simbolo: "R$", codigo: "BRL", codigo_iso: 986, expoente: 2 }
iex> Moeda.find("")
nil
Its function ignore case sensitive.
## Examples
iex> Moeda.find(:brl)
%{ nome: "Brazilian Real", simbolo: "R$", codigo: "BRL", codigo_iso: 986, expoente: 2 }
iex> Moeda.find("brl")
%{ nome: "Brazilian Real", simbolo: "R$", codigo: "BRL", codigo_iso: 986, expoente: 2 }
"""
def find(codigo) when is_atom(codigo) do
codigo |> Atom.to_string() |> String.upcase() |> String.to_atom() |> findp
end
def find(codigo) when is_binary(codigo) do
codigo |> String.upcase() |> String.to_atom() |> findp
end
defp findp(codigo) do
@moedas[codigo]
end
@spec get_atom(String.t() | atom) :: atom | nil
@doc """
Return an atom from a value that represents an ISO 4217 code.
## Examples
iex> Moeda.get_atom(:BRL)
:BRL
iex> Moeda.get_atom("BRL")
:BRL
iex> Moeda.get_atom("")
nil
Its function ignore case sensitive.
## Examples
iex> Moeda.get_atom(:brl)
:BRL
iex> Moeda.get_atom("brl")
:BRL
"""
def get_atom(codigo) do
moeda = find(codigo)
if moeda do
moeda.codigo |> String.upcase() |> String.to_atom()
else
nil
end
end
@spec get_factor(String.t() | atom) :: float | nil
@doc """
Return a multiplication factor from an ISO 4217 code.
## Examples
iex> Moeda.get_factor(:BRL)
100.0
iex> Moeda.get_factor("BRL")
100.0
iex> Moeda.get_factor("")
nil
Its function ignore case sensitive.
## Examples
iex> Moeda.get_factor(:brl)
100.0
iex> Moeda.get_factor("brl")
100.0
"""
def get_factor(codigo) do
moeda = find(codigo)
if moeda do
:math.pow(10, moeda.expoente)
else
nil
end
end
end