diff options
author | Yves Senn <yves.senn@gmail.com> | 2014-12-23 08:52:40 +0100 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2014-12-23 08:52:40 +0100 |
commit | d56b766056837b2db06c568ee78a511fd6c7a84b (patch) | |
tree | 992cc567a73c6cd0672706067c6f53689ec5cea1 /activerecord | |
parent | ced687fe710b2f3d6cf0d0e978bdb531357299e4 (diff) | |
parent | 2859341c383daac74608f978d8e8fad2229042a3 (diff) | |
download | rails-d56b766056837b2db06c568ee78a511fd6c7a84b.tar.gz rails-d56b766056837b2db06c568ee78a511fd6c7a84b.tar.bz2 rails-d56b766056837b2db06c568ee78a511fd6c7a84b.zip |
Merge pull request #18162 from romaimperator/master
Fixing numeric attrs when set to same negative value
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG.md | 7 | ||||
-rw-r--r-- | activerecord/lib/active_record/type/numeric.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/type/decimal_test.rb | 8 | ||||
-rw-r--r-- | activerecord/test/cases/type/integer_test.rb | 2 |
4 files changed, 18 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 6494c7374e..e5a4356523 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,10 @@ +* Fixes bug with 'ActiveRecord::Type::Numeric' that causes negative values to + be marked as having changed when set to the same negative value. + + Closes GH#18161 + + *Daniel Fox* + * Introduce `force: :cascade` option for `create_table`. Using this option will recreate tables even if they have dependent objects (like foreign keys). `db/schema.rb` now uses `force: :cascade`. This makes it possible to diff --git a/activerecord/lib/active_record/type/numeric.rb b/activerecord/lib/active_record/type/numeric.rb index fa43266504..674f996f38 100644 --- a/activerecord/lib/active_record/type/numeric.rb +++ b/activerecord/lib/active_record/type/numeric.rb @@ -29,7 +29,7 @@ module ActiveRecord # 'wibble'.to_i will give zero, we want to make sure # that we aren't marking int zero to string zero as # changed. - value.to_s !~ /\A\d+\.?\d*\z/ + value.to_s !~ /\A-?\d+\.?\d*\z/ end end end diff --git a/activerecord/test/cases/type/decimal_test.rb b/activerecord/test/cases/type/decimal_test.rb index c028aa52af..34ed1d7b19 100644 --- a/activerecord/test/cases/type/decimal_test.rb +++ b/activerecord/test/cases/type/decimal_test.rb @@ -38,6 +38,14 @@ module ActiveRecord type = Decimal.new assert_equal BigDecimal("1"), type.type_cast_from_user(value) end + + def test_changed? + type = Decimal.new + + assert type.changed?(5.0, 5.0, '5.0wibble') + assert_not type.changed?(5.0, 5.0, '5.0') + assert_not type.changed?(-5.0, -5.0, '-5.0') + end end end end diff --git a/activerecord/test/cases/type/integer_test.rb b/activerecord/test/cases/type/integer_test.rb index 5942f77e18..af4d0b4642 100644 --- a/activerecord/test/cases/type/integer_test.rb +++ b/activerecord/test/cases/type/integer_test.rb @@ -47,6 +47,8 @@ module ActiveRecord assert type.changed?(5, 5, '5wibble') assert_not type.changed?(5, 5, '5') assert_not type.changed?(5, 5, '5.0') + assert_not type.changed?(-5, -5, '-5') + assert_not type.changed?(-5, -5, '-5.0') assert_not type.changed?(nil, nil, nil) end |