Merge branch 'jhawthorn-ruby_2_4_bigdecimal_casting'

Closes #27429
This commit is contained in:
Rafael Mendonça França 2017-02-24 19:44:19 -05:00
commit bf8f42b2fe
No known key found for this signature in database
GPG Key ID: FC23B6D0F1EEE948
4 changed files with 24 additions and 1 deletions

View File

@ -21,8 +21,14 @@ module ActiveModel
case value
when ::Float
convert_float_to_big_decimal(value)
when ::Numeric, ::String
when ::Numeric
BigDecimal(value, precision || BIGDECIMAL_PRECISION)
when ::String
begin
value.to_d
rescue ArgumentError
BigDecimal(0)
end
else
if value.respond_to?(:to_d)
value.to_d

View File

@ -11,6 +11,14 @@ module ActiveModel
assert_equal BigDecimal.new("1"), type.cast(:"1")
end
def test_type_cast_decimal_from_invalid_string
type = Decimal.new
assert_nil type.cast("")
assert_equal BigDecimal.new("1"), type.cast("1ignore")
assert_equal BigDecimal.new("0"), type.cast("bad1")
assert_equal BigDecimal.new("0"), type.cast("bad")
end
def test_type_cast_decimal_from_float_with_large_precision
type = Decimal.new(precision: ::Float::DIG + 2)
assert_equal BigDecimal.new("123.0"), type.cast(123.0)

View File

@ -9,6 +9,14 @@ module ActiveModel
assert_equal 1.0, type.cast("1")
end
def test_type_cast_float_from_invalid_string
type = Type::Float.new
assert_nil type.cast("")
assert_equal 1.0, type.cast("1ignore")
assert_equal 0.0, type.cast("bad1")
assert_equal 0.0, type.cast("bad")
end
def test_changing_float
type = Type::Float.new

View File

@ -7,6 +7,7 @@ module ActiveModel
class IntegerTest < ActiveModel::TestCase
test "simple values" do
type = Type::Integer.new
assert_nil type.cast("")
assert_equal 1, type.cast(1)
assert_equal 1, type.cast("1")
assert_equal 1, type.cast("1ignore")