mirror of https://github.com/rails/rails
commit
bf8f42b2fe
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue