RubyMoney/money-rails

Unable to set `default_currency` to `nil`

sirwolfgang opened this issue · 1 comments

Noticed an issue where in our system an edge case would cause the default currency of USD to get applied. Generally we want to be strict, and not risk a default value. When I attempted to set the default_currency to nil this started to error.

Based on this message I found while debugging [WARNING] The default currency will change from 'USD' to 'nil' in the next major release., it doesn't sound like it's intended to prevent the removal of a default.

I've prepared two PRs that make the required adjustments to allow nil to be used as a default value, that triggers NoCurrency error.

This will allow strictly defined systems to operate without risk of unexpected currencies.

We would love to see this included as well. A default currency is a hard no for our use case. And just after installing the gem and setting up an object, I already stumbled about an issue which shows me why having a default could cause big problems.

class Account < ApplicationRecord
  normalizes :balance_currency, with: ->(currency) { currency.strip.upcase }

  validates :balance, presence: true

  # to provide a Money object for the balance attribute
  monetize :balance, as: :money
end

$> acc = Account.last

  Account Load ...
  {
             :balance => 50,
    :balance_currency => "HUF",
  }

$> acc.money

{
           :cents => 50,
    :currency_iso => "EUR"
}