Include this module to get soft deletion of root level documents. This will add a deleted_at field to the Document, managed automatically. Potentially incompatible with unique indices. (if collisions with deleted items)
@example Make a document paranoid.
class Person include Mongoid::Document include Mongoid::Paranoia end
Delete the paranoid Document from the database completely.
@example Hard delete the document.
document.delete!
@return [ true, false ] If the operation succeeded.
@since 1.0.0
# File lib/mongoid/paranoia.rb, line 40 def delete! Persistence::Operations.remove(self).persist end
Delete the paranoid Document from the database completely. This will run the destroy callbacks.
@example Hard destroy the document.
document.destroy!
@return [ true, false ] If the operation succeeded.
@since 1.0.0
# File lib/mongoid/paranoia.rb, line 28 def destroy! run_callbacks(:destroy) { delete! } end
Determines if this document is destroyed.
@example Is the document destroyed?
person.destroyed?
@return [ true, false ] If the document is destroyed.
@since 1.0.0
# File lib/mongoid/paranoia.rb, line 78 def destroyed? @destroyed || !!deleted_at end
Delete the Document, will set the deleted_at timestamp and not actually delete it.
@example Soft remove the document.
document.remove
@param [ Hash ] options The database options.
@return [ true ] True.
@since 1.0.0
# File lib/mongoid/paranoia.rb, line 55 def remove(options = {}) time = self.deleted_at = Time.now paranoid_collection.update( atomic_selector, { "$set" => { paranoid_field => time }}, Safety.merge_safety_options(options) ) cascade! @destroyed = true IdentityMap.remove(self) Threaded.clear_options! true end
Restores a previously soft-deleted document. Handles this by removing the deleted_at flag.
@example Restore the document from deleted state.
document.restore
@return [ Time ] The time the document had been deleted.
@since 1.0.0
# File lib/mongoid/paranoia.rb, line 91 def restore paranoid_collection.update( atomic_selector, { "$unset" => { paranoid_field => true }} ) attributes.delete("deleted_at") end
Generated with the Darkfish Rdoc Generator 2.