class CouchRest::Document
Attributes
Public Class Methods
override the CouchRest::Model-wide default_database This is not a thread safe operation, do not change the model database at runtime.
# File lib/couchrest/document.rb, line 98 def use_database(db) self.database = db end
Public Instance Methods
copies the document to a new id. If the destination id currently exists, a rev must be provided. dest
can take one of two forms if overwriting: “id_to_overwrite?rev=revision” or the actual doc hash with a '_rev' key
# File lib/couchrest/document.rb, line 71 def copy(dest) raise ArgumentError, "doc.database required to copy" unless database result = database.copy_doc(self, dest) result['ok'] end
Deletes the document from the database. Runs the :delete callbacks. Removes the _id
and _rev
fields, preparing the document to be saved to a new _id
. If bulk
is true
(defaults to false) the document won't actually be deleted from the db until bulk save.
# File lib/couchrest/document.rb, line 58 def destroy(bulk = false) raise ArgumentError, "doc.database required to destroy" unless database result = database.delete_doc(self, bulk) if result['ok'] self['_rev'] = nil self['_id'] = nil end result['ok'] end
# File lib/couchrest/document.rb, line 27 def id self['_id'] end
# File lib/couchrest/document.rb, line 30 def id=(id) self['_id'] = id end
returns true if the document has never been saved
# File lib/couchrest/document.rb, line 38 def new? !rev end
# File lib/couchrest/document.rb, line 33 def rev self['_rev'] end
Saves the document to the db using create or update. Also runs the :save callbacks. Sets the _id
and _rev
fields based on CouchDB's response. If bulk
is true
(defaults to false) the document is cached for bulk save.
# File lib/couchrest/document.rb, line 47 def save(bulk = false) raise ArgumentError, "doc.database required for saving" unless database result = database.save_doc self, bulk result['ok'] end
Returns the CouchDB uri for the document
# File lib/couchrest/document.rb, line 78 def uri(append_rev = false) return nil if new? couch_uri = "#{database.root}/#{CGI.escape(id)}" if append_rev == true couch_uri << "?rev=#{rev}" elsif append_rev.kind_of?(Integer) couch_uri << "?rev=#{append_rev}" end couch_uri end