
Resource#destroy should return false if called on a new record
Reported by Anthony Williams | June 18th, 2008 @ 12:45 PM
Hi,
Mucking around with some specs today I found that calling #destroy on a new record would raise a nasty exception:
NoMethodError in 'DataMapper::Resource with sqlite3 should return false to #destroy if the resource is new'
undefined method `model' for nil:NilClass
/Users/anthony/Source/dm-core/lib/dm-core/adapters/data_objects_adapter.rb:252:in `delete_statement'
/Users/anthony/Source/dm-core/lib/dm-core/adapters/data_objects_adapter.rb:81:in `delete'
/Users/anthony/Source/dm-core/lib/dm-core/repository.rb:80:in `delete'
/Users/anthony/Source/dm-core/lib/dm-core/resource.rb:267:in `destroy'
/Users/anthony/Source/dm-core/spec/integration/resource_spec.rb:149:
Resource#destroy calls #to_query, which returns nil if the resource is not yet saved, which then gets passed down into Repository#delete (and on and on) until DataObjectsAdapter#delete_statement calls nil#model expecting it to have been a Query.
I've fixed this in my fork by getting Resource#destroy to return false if the resource is unsaved: http://github.com/anthonyw/dm-co...
Comments and changes to this ticket
-
Troy K June 25th, 2008 @ 10:24 AM
- Tag set to dm-core, patch
This seems to be fixed in the latest pull. Note the first line of def destroy in resource.rb (line #260)
def destroy return false if new_record? return false unless repository.delete(to_query) @new_record = true repository.identity_map(model).delete(key) original_values.clear properties.each do |property| # We'll set the original value to nil as if we had a new record original_values[property.name] = nil if attribute_loaded?(property.name) end true end
-
Dan Kubb (dkubb) June 25th, 2008 @ 10:40 AM
- State changed from new to resolved
Please Sign in or create a free account to add a new ticket.
With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »