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
This commit is contained in:
Justin Mazzi 2011-11-05 22:36:19 -04:00
parent e7b7b44123
commit c7d2078596
2 changed files with 20 additions and 1 deletions

@ -1771,7 +1771,8 @@ def attribute_for_inspect(attr_name)
# 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.

@ -35,6 +35,24 @@ def test_attribute_present
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"