Packages
ex_money
6.1.0
6.1.1
6.1.0
6.0.0
6.0.0-rc.0
5.24.2
5.24.1
5.24.0
retired
5.23.0
5.22.0
5.21.0
5.20.0
5.19.2
5.19.1
5.19.0
5.18.0
5.17.2
5.17.1
5.17.0
5.16.1
5.16.0
5.15.4
5.15.3
5.15.2
5.15.1
5.15.0
5.14.1
5.13.0
5.12.4
5.12.3
5.12.2
5.12.1
5.12.0
5.11.0
5.10.0
5.9.0
5.8.0
5.7.4
5.7.3
5.7.2
5.7.1
5.7.0
5.6.0
5.5.5
5.5.4
5.5.3
5.5.2
5.5.1
5.5.0
5.4.1
5.4.0
5.4.0-rc.0
5.3.2
5.3.1
5.3.0
5.2.1
5.2.0
5.1.0
5.0.2
5.0.1
5.0.0
retired
4.4.3
4.4.2
retired
4.4.1
4.4.0
4.3.0
4.2.2
4.2.1
4.2.0
4.1.0
4.0.0
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0
3.3.1
3.3.0
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.1.0
3.0.0
2.12.2
2.12.1
retired
2.12.0
retired
2.11.0
2.10.0
2.9.1
2.9.0
2.8.0
2.7.3
2.7.2
2.7.1
2.7.0
2.6.1
2.6.0
2.5.0
2.4.0
2.3.0
2.2.2
2.2.1
2.2.0
2.1.0
2.1.0-rc.1
retired
2.1.0-rc.0
retired
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.1.3
1.1.2
1.1.1
retired
1.1.0
1.0.0
1.0.0-rc.0
retired
0.9.0
retired
0.8.5
retired
0.8.4
retired
0.8.3
retired
0.8.2
retired
0.8.1
retired
0.8.0
retired
0.7.0
retired
0.6.2
retired
0.6.1
retired
0.6.0
retired
0.5.3
retired
0.5.2
retired
0.5.1
retired
0.5.0
retired
0.4.3
retired
0.4.2
retired
0.4.1
retired
0.4.0
retired
0.3.0
retired
0.2.0
retired
0.1.7
retired
0.1.6
retired
0.1.5
retired
0.1.4
retired
0.1.3
retired
0.1.2
retired
0.1.1
retired
0.1.0
retired
0.0.16
retired
0.0.15
retired
0.0.14
retired
0.0.13
retired
0.0.12
retired
0.0.11
retired
0.0.10
retired
0.0.9
retired
0.0.7
retired
0.0.6
retired
0.0.5
retired
0.0.4
retired
0.0.3
retired
0.0.2
retired
Money functions for operations on and localization of a money data type with support for ISO 4217 currencies and ISO 24165 digial tokens (crypto currencies).
Current section
Files
Jump to
Current section
Files
lib/money/application.ex
defmodule Money.Application do
use Application
require Logger
def start(_type, args) do
children = [
Money.Currency.Store
| exchange_rate_supervisor()
]
opts =
if args == [] do
[strategy: :one_for_one, name: Money.Supervisor]
else
args
end
# Currencies declared in `:custom_currencies` are registered by
# `Money.Currency.Store` when it starts (and after any restart), so no
# separate registration step is required here.
Supervisor.start_link(children, opts)
end
defp exchange_rate_supervisor do
maybe_log_deprecation()
if Money.get_env(:auto_start_exchange_rate_service, true, :boolean) do
[Money.ExchangeRates.Supervisor]
else
[]
end
end
@doc """
Registers the currencies declared in the `:custom_currencies` configuration
into the running currency store.
This is an escape hatch, not the normal flow. Configured currencies are
registered automatically by `Money.Currency.Store` when it starts, and again
after any supervisor restart, so most applications never call this function.
Use it only to re-apply the configuration to an already-running store after
changing `:custom_currencies` at runtime. Currencies that are already
registered are left unchanged, and any entry that fails to register is logged
and skipped rather than raised.
### Returns
* `:ok` in all cases. Per-currency failures are emitted as log warnings, not
returned.
### Examples
iex> Money.Application.register_custom_currencies()
:ok
"""
@spec register_custom_currencies() :: :ok
def register_custom_currencies do
Money.Currency.configured_currency_specs()
|> Enum.each(®ister_configured_currency/1)
end
defp register_configured_currency({code, options}) do
case Money.Currency.new(code, options) do
{:ok, _currency} ->
:ok
{:error, exception} ->
Logger.warning(
"Failed to register custom currency #{inspect(code)}: " <>
Exception.message(exception)
)
end
end
defp register_configured_currency(other) do
Logger.warning(
"Ignoring invalid :custom_currencies entry #{inspect(other)}; " <>
"expected a {code, options} tuple"
)
end
@doc false
def maybe_log_deprecation do
case Application.fetch_env(:ex_money, :delay_before_first_retrieval) do
{:ok, _} ->
Logger.warning(
"[ex_money] Configuration option :delay_before_first_retrieval is deprecated. " <>
"Please remove it from your configuration."
)
Application.delete_env(:ex_money, :delay_before_first_retrieval)
:error ->
nil
end
case Application.fetch_env(:ex_money, :exchange_rate_service) do
{:ok, start?} ->
Logger.warning(
"[ex_money] Configuration option :exchange_rate_service is deprecated " <>
"in favour of :auto_start_exchange_rate_service. Please " <>
"update your configuration."
)
Application.put_env(:ex_money, :auto_start_exchange_rate_service, start?)
Application.delete_env(:ex_money, :exchange_rate_service)
:error ->
nil
end
case Application.fetch_env(:ex_money, :auto_start_exchange_rate_service) do
{:ok, true} ->
Logger.warning(
"[ex_money] Automatically starting the exchange rate service is deprecated. " <>
"Set `auto_start_exchange_rate_service: false` and add " <>
"`Money.ExchangeRates.Retriever` to your supervision tree."
)
{:ok, false} ->
nil
:error ->
Logger.warning(
"[ex_money] Automatically starting the exchange rate service is deprecated. " <>
"Set `auto_start_exchange_rate_service: false` and, if you use the service, " <>
"add `Money.ExchangeRates.Retriever` to your supervision tree."
)
end
end
end