Correctly determine if an attribute is uninitialized

In real usage, we give the builder a types hash with a default value of
`Type::Value.new`. This means we need to explicitly check for the key,
rather than the truthiness of the type to determine if it's a known but
uninitialized attribute
This commit is contained in:
Sean Griffin 2014-11-14 11:58:35 -07:00
parent 0f29c21607
commit 3f63ac4e4d
2 changed files with 10 additions and 2 deletions

View File

@ -65,7 +65,7 @@ module ActiveRecord
if values.key?(name)
hash[name] = Attribute.from_database(name, values[name], type)
elsif type
elsif types.key?(name)
hash[name] = Attribute.uninitialized(name, type)
end
end

View File

@ -109,7 +109,15 @@ module ActiveRecord
test "fetch_value returns nil for unknown attributes" do
attributes = attributes_with_uninitialized_key
assert_nil attributes.fetch_value(:wibble)
assert_nil attributes.fetch_value(:wibble) { "hello" }
end
test "fetch_value returns nil for unknown attributes when types has a default" do
types = Hash.new(Type::Value.new)
builder = AttributeSet::Builder.new(types)
attributes = builder.build_from_database
assert_nil attributes.fetch_value(:wibble) { "hello" }
end
test "fetch_value uses the given block for uninitialized attributes" do