Skip to content

Commit

Permalink
Fix currency detection when parsing money with locales
Browse files Browse the repository at this point in the history
  • Loading branch information
kipcole9 committed May 26, 2020
1 parent ebce6bb commit 1b2da16
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 3 deletions.
2 changes: 1 addition & 1 deletion lib/money.ex
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,7 @@ defmodule Money do

with {:ok, backend} <- Cldr.validate_backend(backend),
{:ok, locale} <- Cldr.validate_locale(locale, backend) do
currency = Cldr.Currency.current_currency_from_locale(locale)
currency = Cldr.Currency.currency_from_locale(locale)

money_map
|> Map.put(:currency, currency)
Expand Down
2 changes: 1 addition & 1 deletion mix/test_cldr.ex
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ defmodule Money.Cldr do
@moduledoc false

use Cldr,
locales: ["en", "de", "it", "es", "fr", "da"],
locales: ["en", "de", "it", "es", "fr", "da", "zh-Hant-HK", "zh-Hans", "ja"],
default_locale: "en",
data_dir: "../cldr/priv/cldr",
providers: [Cldr.Number, Money]
Expand Down
11 changes: 11 additions & 0 deletions test/money_parse_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,17 @@ defmodule MoneyTest.Parse do
assert Money.parse("100", default_currency: "australian dollars") == Money.new(:AUD, 100)
end

test "with locale overrides" do
# A locale that has a regional override. The regional override
# takes precedence and hence the currency is USD
assert Money.parse("100", locale: "zh-Hans-u-rg-uszzzz") == Money.new(:USD, 100)

# A locale that has a regional override and a currency
# override uses the currency override as precedent over
# the regional override. In this case, EUR
assert Money.parse("100", locale: "zh-Hans-u-rg-uszzzz-cu-eur") == Money.new(:EUR, 100)
end

test "parse with negative numbers" do
assert Money.parse("-127,54 €", locale: "fr") == Money.new(:EUR, "-127.54")
assert Money.parse("-127,54€", locale: "fr") == Money.new(:EUR, "-127.54")
Expand Down
2 changes: 1 addition & 1 deletion test/support/test_cldr.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ require Money
defmodule Test.Cldr do
use Cldr,
default_locale: "en",
locales: ["en", "root", "de", "da", "nl", "de-CH", "fr"],
locales: ["en", "root", "de", "da", "nl", "de-CH", "fr", "zh-Hant-HK", "zh-Hans", "ja"],
providers: [Cldr.Number, Money],
supress_warnings: true
end

0 comments on commit 1b2da16

Please sign in to comment.