Skip to content

Money version 2.2.0

Compare
Choose a tag to compare
@kipcole9 kipcole9 released this 11 Feb 16:08

This release is primarily a refactoring of the exchange rates service. It separates the concerns of retrieval and caching. It also normalises the API amongst the three modules Money.ExchangeRates, Money.ExchangeRates.Retriever and Money.ExchangeRates.Cache. Each of these modules implements:

  • latest_rates/0
  • historic_rates/1

This makes it clear that rates can be retrieved through the cache or the service API. The implementation in Money.ExchangeRates will return the cached value if available or will call the service API if not.

Migration from earlier releases

The only know issue for migrating from earlier releases is if your application requires a different supervision strategy for the exchange rate service that the default one. This is documented in the README in the section "Using Ecto or other applications from within the callback module". The change is the way in which the supervisor is defined. It is included here for completeness:

In prior releases:

supervisor(Money.ExchangeRates.Supervisor, [])

From this release onwards:

supervisor(Money.ExchangeRates.Supervisor, [[restart: true, start_retriever: true]])

Note that the option start_retriever: true is optional. The default is false. The option restart: true is required in this case because the exchange rates supervisor is always started when ex_money is started even if the retriever is not started.

Enhancements

  • Define an exchange rates cache behaviour Money.ExchangeRates.Cache

  • Adds the config key :exchange_rates_cache_module which can be set to a module that implements the Money.ExchangeRates.Cache behaviour. Two modules are provided:

    • Money.ExchangeRates.Cache.Ets (the default) and
    • Money.ExchangeRates.Cache.Dets
  • Move all exchange rates retrieval functions to Money.ExchangeRates.Retriever

  • Add several functions to Money.ExchangeRates.Retriever:

    • :config/0 to return the current retriever configuration.
    • reconfigure/1 to allow reconfiguration of the exchange rates retriever.
    • start/1 to start the service. Delegates to Money.ExchangeRates.Supervisor.start_retriever/1.
    • stop/0 to stop the service. Delegates to Money.ExchangeRates.Supervisor.stop_retriever/0.
    • restart/0 to restart the service. Delegates to Money.ExchangeRates.Supervisor.restart_retriever/0.
    • delete/0 to delete the service. It can be started again with start/1. Delegates to Money.ExchangeRates.Supervisor.delete_retriever/0.
  • If the config key :exchange_rates_retrieve_every is set to an atom rather than an integer then no periodic retrieval will be performed. This allows the configuration of the following, which is also the default:

config :ex_money,
  exchange_rates_retrieve_every: :never
  • Use etag's in the Money.ExchangeRates.OpenExchangeRates API module when retrieving exchange rates from the service.

  • Add Money.known_currencies/0 which delegates to Cldr.known_currencies/0 and returns the list of known currency codes

  • Add Money.known_current_currencies/0 to return the list of currencies currently active according to ISO 4217

  • Add Money.known_historic_currencies/0 to return a list of currencies known to Cldr but which are not considered in current use

  • Add Money.known_tender_currencies/0 to return a list of currencies defined as legal tender in Cldr

  • Add the configuration key :json_library that specifies which json library to use for decoding json. The default is Cldr.Config.json_library/0 which is currently Poison although this is likely to change to Jason when Phoenix makes this change.

  • Moves the protocol implementations for String.Chars, Inspect and Phoenix.HTML.Safe to a separate file so that recompilation on locale configuration change works correctly.