You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
but this still seems like a very easy way for developers to shoot themselves in the foot when dealing with Money. I was wondering if Shopify (or others) have dealt with this issue before and have any recommendations for avoiding this issue.
One thought I had was a Rubocop rule that requires an explicit initial value for all #sum calls, but that seems overkill and annoying since it works fine when dealing with non-Money numerics.
The text was updated successfully, but these errors were encountered:
Interesting. I don't think we should have 0 == Money.new(0, "USD") # => true. This could lead to other wrong assumptions. The only thing I can think of (other than the rubocop rule you mentioned) is creating a helper to do sums
Unfortunately I don't think this could be enforced via Rubocop, since Rubocop cannot statically know that foos.sum(&:amount) returns a Money.
There's probably no great solution here... Maybe Money#==(other) could emit a warning when other is a Numeric? This would keep the current behavior but make the issue a bit more obvious.
We ran into an interesting bug today. We had code that looked like this:
where
foos
is a collection that has anamount
property that returns aMoney
, andexpected_total
is also aMoney
.This works fine, except when
foos
is empty. In that case, the default value0
(anInteger
) is used, and as it turns out:The fix is easy enough, just provide an explicit initial value:
but this still seems like a very easy way for developers to shoot themselves in the foot when dealing with
Money
. I was wondering if Shopify (or others) have dealt with this issue before and have any recommendations for avoiding this issue.One thought I had was a Rubocop rule that requires an explicit initial value for all
#sum
calls, but that seems overkill and annoying since it works fine when dealing with non-Money
numerics.The text was updated successfully, but these errors were encountered: