aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2014-10-16 23:20:21 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2014-10-16 23:20:21 -0300
commit8a80e3b6c446931330ad07130603712e8d0a2ff3 (patch)
treeb9daeede0740a4a0f05707479adfd789776ea126 /activerecord
parent056d06627af1c99647d88521557c65ddc476520f (diff)
parente01a46f1f0e21d9018906a6a8dcfdae2d92f32ae (diff)
downloadrails-8a80e3b6c446931330ad07130603712e8d0a2ff3.tar.gz
rails-8a80e3b6c446931330ad07130603712e8d0a2ff3.tar.bz2
rails-8a80e3b6c446931330ad07130603712e8d0a2ff3.zip
Merge pull request #17296 from sgrif/sg-booleans-should-make-sense
Add a deprecation warning for abiguous boolean values
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/type/boolean.rb9
-rw-r--r--activerecord/test/cases/types_test.rb10
2 files changed, 14 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/type/boolean.rb b/activerecord/lib/active_record/type/boolean.rb
index 06dd17ed28..1311be3944 100644
--- a/activerecord/lib/active_record/type/boolean.rb
+++ b/activerecord/lib/active_record/type/boolean.rb
@@ -10,8 +10,15 @@ module ActiveRecord
def cast_value(value)
if value == ''
nil
+ elsif ConnectionAdapters::Column::TRUE_VALUES.include?(value)
+ true
else
- ConnectionAdapters::Column::TRUE_VALUES.include?(value)
+ if !ConnectionAdapters::Column::FALSE_VALUES.include?(value)
+ ActiveSupport::Deprecation.warn(<<-EOM)
+ You attempted to assign a value which is not explicitly true or false to a boolean column. Currently this value casts to false. This will change to match Ruby's sematics, and will cast to true in Rails 5.0. If you would like to maintain the current behavior, you should explicitly handle the values you would like cast to false.
+ EOM
+ end
+ false
end
end
end
diff --git a/activerecord/test/cases/types_test.rb b/activerecord/test/cases/types_test.rb
index db4f78d354..25e6549072 100644
--- a/activerecord/test/cases/types_test.rb
+++ b/activerecord/test/cases/types_test.rb
@@ -29,10 +29,12 @@ module ActiveRecord
assert_equal false, type.type_cast_from_user('FALSE')
assert_equal false, type.type_cast_from_user('off')
assert_equal false, type.type_cast_from_user('OFF')
- assert_equal false, type.type_cast_from_user(' ')
- assert_equal false, type.type_cast_from_user("\u3000\r\n")
- assert_equal false, type.type_cast_from_user("\u0000")
- assert_equal false, type.type_cast_from_user('SOMETHING RANDOM')
+ assert_deprecated do
+ assert_equal false, type.type_cast_from_user(' ')
+ assert_equal false, type.type_cast_from_user("\u3000\r\n")
+ assert_equal false, type.type_cast_from_user("\u0000")
+ assert_equal false, type.type_cast_from_user('SOMETHING RANDOM')
+ end
end
def test_type_cast_integer