Skip to content

Commit e8cad01

Browse files
authored
Merge pull request #49576 from fatkodima/fix-number-helper-to_d
`NumberHelper`: handle objects responding `to_d`
2 parents 8776e95 + fe3b07f commit e8cad01

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

activesupport/lib/active_support/number_helper/number_converter.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,10 @@ def valid_bigdecimal
179179
case number
180180
when Float, Rational
181181
number.to_d(0)
182-
else
182+
when String
183183
BigDecimal(number, exception: false)
184+
else
185+
number.to_d rescue nil
184186
end
185187
end
186188
end

activesupport/test/number_helper_test.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ class TestClassWithClassNumberHelpers
1515
extend ActiveSupport::NumberHelper
1616
end
1717

18+
class NumberWithToD
19+
def initialize(number)
20+
@number = number
21+
end
22+
23+
def to_d
24+
@number.to_d
25+
end
26+
end
27+
1828
def setup
1929
@instance_with_helpers = TestClassWithInstanceNumberHelpers.new
2030
end
@@ -95,6 +105,7 @@ def test_number_to_currency
95105
assert_equal("-$,11", number_helper.number_to_currency("-,11"))
96106
assert_equal("$0.00", number_helper.number_to_currency(-0.0))
97107
assert_equal("$0.00", number_helper.number_to_currency("-0.0"))
108+
assert_equal("$1.23", number_helper.number_to_currency(NumberWithToD.new(1.23)))
98109
end
99110
end
100111

0 commit comments

Comments
 (0)