# `Money.ExchangeRates.OpenExchangeRates`
[🔗](https://github.com/kipcole9/money/blob/v6.0.0-rc.0/lib/money/exchange_rates/open_exchange_rates.ex#L1)

Implements the `Money.ExchangeRates` for the Open Exchange
Rates service.

## Required configuration:

The configuration key `:open_exchange_rates_app_id` should be
set to your `app_id`.  for example:

    config :ex_money,
      open_exchange_rates_app_id: "your_app_id"

or configure it via environment variable:

    config :ex_money,
      open_exchange_rates_app_id: {:system, "OPEN_EXCHANGE_RATES_APP_ID"}

It is also possible to configure an alternative base url for this
service in case it changes in the future. For example:

    config :ex_money,
      open_exchange_rates_app_id: "your_app_id"
      open_exchange_rates_url: "https://openexchangerates.org/alternative_api"

# `decode_rates`

# `get_historic_rates`

Retrieves the historic exchange rates from Open Exchange Rates site.

* `date` is a date returned by `Date.new/3` or any struct with the
  elements `:year`, `:month` and `:day`.

* `config` is the retrieval configuration. When invoked from the
  exchange rates services this will be the config returned from
  `Money.ExchangeRates.config/0`

Returns:

* `{:ok, rates}` if the rates can be retrieved

* `{:error, reason}` if rates cannot be retrieved

Typically this function is called by the exchange rates retrieval
service although it can be called outside that context as
required.

# `get_latest_rates`

```elixir
@spec get_latest_rates(Money.ExchangeRates.Config.t()) ::
  {:ok, map()} | {:error, String.t()}
```

Retrieves the latest exchange rates from Open Exchange Rates site.

* `config` is the retrieval configuration. When invoked from the
exchange rates services this will be the config returned from
`Money.ExchangeRates.config/0`

Returns:

* `{:ok, rates}` if the rates can be retrieved

* `{:error, reason}` if rates cannot be retrieved

Typically this function is called by the exchange rates retrieval
service although it can be called outside that context as
required.

# `init`

Update the retriever configuration to include the requirements
for Open Exchange Rates.  This function is invoked when the
exchange rate service starts up, just after the ets table
:exchange_rates is created.

* `default_config` is the configuration returned by `Money.ExchangeRates.default_config/0`

Returns the configuration either unchanged or updated with
additional configuration specific to this exchange
rates retrieval module.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
