diff options
author | Justin Mazzi <hh@mailheist.com> | 2011-11-05 22:36:19 -0400 |
---|---|---|
committer | Justin Mazzi <hh@mailheist.com> | 2011-11-05 22:36:19 -0400 |
commit | c7d20785965d5f0877d0c13d0d9929f2fce50a8b (patch) | |
tree | 22a9f2da5f5667741438346857301469cd0f97d1 /activerecord | |
parent | e7b7b4412380e7ce2d8e6ae402cb7fe02d7666b8 (diff) | |
download | rails-c7d20785965d5f0877d0c13d0d9929f2fce50a8b.tar.gz rails-c7d20785965d5f0877d0c13d0d9929f2fce50a8b.tar.bz2 rails-c7d20785965d5f0877d0c13d0d9929f2fce50a8b.zip |
Update ActiveRecord#attribute_present? to work as documented
"Returns true if the specified attribute has been set by the user or by
a database load and is neither nil nor empty?"
Fixes #1613
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/base.rb | 3 | ||||
-rw-r--r-- | activerecord/test/cases/attribute_methods_test.rb | 18 |
2 files changed, 20 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 455b299270..feeebb7131 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1771,7 +1771,8 @@ MSG # Returns true if the specified +attribute+ has been set by the user or by a database load and is neither # nil nor empty? (the latter only applies to objects that respond to empty?, most notably Strings). def attribute_present?(attribute) - !_read_attribute(attribute).blank? + value = _read_attribute(attribute) + !value.nil? || (value.respond_to?(:empty?) && !value.empty?) end # Returns the column object for the named attribute. diff --git a/activerecord/test/cases/attribute_methods_test.rb b/activerecord/test/cases/attribute_methods_test.rb index b1b41fed0d..9300c57819 100644 --- a/activerecord/test/cases/attribute_methods_test.rb +++ b/activerecord/test/cases/attribute_methods_test.rb @@ -35,6 +35,24 @@ class AttributeMethodsTest < ActiveRecord::TestCase assert !t.attribute_present?("content") end + def test_attribute_present_with_booleans + b1 = Boolean.new + b1.value = false + assert b1.attribute_present?(:value) + + b2 = Boolean.new + b2.value = true + assert b2.attribute_present?(:value) + + b3 = Boolean.new + assert !b3.attribute_present?(:value) + + b4 = Boolean.new + b4.value = false + b4.save! + assert Boolean.find(b4.id).attribute_present?(:value) + end + def test_attribute_keys_on_new_instance t = Topic.new assert_equal nil, t.title, "The topics table has a title column, so it should be nil" |