Skip to content

Releases: kipcole9/money

Money version 2.0.4

25 Jan 12:07
Compare
Choose a tag to compare

Bug Fixes

  • Fixed from_float!/2 which would fail since new/2 does not return {:ok, Money.t}. Note that from ex_money 3.0, Money.new/2 will return {:ok, Money.t} to be consistent with canonical approaches in Elixir. Closes #48. Thanks for @LostKobrakai.

Money version 2.0.3

24 Jan 03:07
Compare
Choose a tag to compare

Bug Fixes

  • Fixes the typespec for Money.new/2 and revises several other typespecs. Added a dialyzer configuration. Since Money.new/2 allows flexible (probably too flexible) order or arguments, the typespec does not fully match the function implementation and Dialyzer understandably complains. However the value of a typespec as documentation argues against making the typespec formally correct. This will be revisited for Money 3.0.

Money version 2.0.2

17 Jan 18:36
Compare
Choose a tag to compare

Bug Fixes

  • Money.Sigil was calling String.to_existing_atom/1 directly rather than Cldr.validate_currency/1. Since currency codes are only loaded and therefore the atoms materialized when Cldr is loaded this created a situation whereby a valid currency code may raise an agument error. Money.Sigil now correctly calls Cldr.validate_currency/1 which ensures the currency atoms are loaded before validation. Closes #46.

Money version 2.0.1

15 Jan 20:46
Compare
Choose a tag to compare

Bug Fixes

  • Phoenix.HTML.Safe protocol implementation correctly returns a formatted string, not an {:ok, string} tuple. Closes #45.

Money version 2.0.0

14 Jan 02:52
Compare
Choose a tag to compare

Breaking Changes

  • The function Money.new/2 no longer supports a float amount. The new function Money.from_float/2 is introduced. The factory function Money.new/2 previously supported a float amount as a parameter. There are many well-documented issues with float. Although a float with a precision of no more than 15 digits will convert (and round-trip) without loss of precision there is a real possibility that the upstream calculations that produced the float will have introduced rounding or precision errors. Calling Money.new/2 with a float amount will return an error tuple:

    {:error, {
      Money.InvalidAmountError,
        "Float amounts are not supported in new/2 due to potenial rounding " <>
        "and precision issues.  If absolutely required, use Money.from_float/2"}}
    
  • Remove support for Money tuples in Money.Ecto.Composite.Type and Money.Ecto.Map.Type. Previously there has been support for dumping Money in a tuple format. This support has now been removed and all Money operations should be based on the Money.t struct.

Enhancements

  • Add Money.from_float/2 to create a Money struct from a float and a currency code. This function is named to make it clear that we risk losing precision due to upstream rounding errors. According to the standard and experimentation, floats of up to 15 digits of precision will round trip without error. Therefore from_float/2 will check the precision of the number and return an error if the precision is greater than 15 since the correctness of the number cannot be verified beyond that.

  • Add Money.from_float!/2 which is like from_float/2 but raises on error

  • Formatted the text the with the Elixir 1.6 code formatter

Money version 1.1.3

08 Jan 09:59
Compare
Choose a tag to compare

Enhancements

  • Improves the documentation that describes how to configure locales and how that relates to Money.to_string/2

  • Add Money.from_integer/2 as the effective inverse of Money.to_integer_exp/1. This function converts an integer form of money (inluding any decimal digits) into a Money struct. This is useful for services that return money in an integer format.

  iex> Money.from_integer(20000, :USD)
  #Money<:USD, 200.00>

  iex> Money.from_integer(200, :JPY)
  #Money<:JPY, 200>

Money version 1.1.2

06 Jan 16:50
Compare
Choose a tag to compare

Bug fixes

  • Fixes a bug in Money.to_integer_exp/1 which was not correctly adjusting the exponent for money amounts that had no decimal places, or the number of decimal places was less than that required for the currency, Additional tests have been added.

Money version 1.1.1

06 Jan 04:45
Compare
Choose a tag to compare

Enhancements

  • Add Money.to_integer_exp to convert the Money into a tuple of the currency_code, integer (coefficient), exponent and remainder. This is useful for services that require money to be presented in an integer format.
  iex> m = Money.new(:USD, 200.012356)
  #Money<:USD, 200.012356>
  iex> Money.to_integer_exp(m)
  {:USD, 20001, -2, Money.new(:USD, 0.002356)}
  • Format the code using the Elixir code formatter

Money version 1.1.0

21 Dec 23:07
Compare
Choose a tag to compare

Money v1.1.0 released on December 22nd 2017

For older changelogs please consult the release tag on GitHub

Changes & Deprecations

  • The configuration option :exchange_rate_service is deprecated in favour of :auto_start_exchange_rate_service to better reflect the intent of the option. The keyword :exchange_rate_service will continue to be supported until Money version 2.0.

  • The configuration option :delay_before_first_retrieval is deprecated and is removed from the configuration struct. Since the option has had no effect since version 0.9 its removal should have no impact on existing code.

  • Added Falsehoods programmers believe about prices topics which give a good summary of the challenges of managing money in an application and how Money manages each of them.

Money version 1.0 release

10 Dec 21:48
Compare
Choose a tag to compare

Money v1.0.0

This version signals API stability.

Enhancements