moved stuff around and cleaned up some deprecation notices [save/save_doc]

This commit is contained in:
Matt Aimonetti 2009-02-02 16:10:07 -08:00
parent fa29906900
commit 08c7f2107c
7 changed files with 74 additions and 92 deletions

View file

@ -14,7 +14,7 @@ module CouchRest
end
class Document < Response
include CouchRest::Mixins::Views
include CouchRest::Mixins::Attachments
attr_accessor :database
@@database = nil
@ -38,6 +38,36 @@ module CouchRest
self['_rev']
end
# returns true if the document has never been saved
def new_document?
!rev
end
# Saves the document to the db using create or update. Also runs the :save
# callbacks. Sets the <tt>_id</tt> and <tt>_rev</tt> fields based on
# CouchDB's response.
# If <tt>bulk</tt> is <tt>true</tt> (defaults to false) the document is cached for bulk save.
def save(bulk = false)
raise ArgumentError, "doc.database required for saving" unless database
result = database.save_doc self, bulk
result['ok']
end
# Deletes the document from the database. Runs the :delete callbacks.
# Removes the <tt>_id</tt> and <tt>_rev</tt> fields, preparing the
# document to be saved to a new <tt>_id</tt>.
# If <tt>bulk</tt> is <tt>true</tt> (defaults to false) the document won't
# actually be deleted from the db until bulk save.
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
# copies the document to a new id. If the destination id currently exists, a rev must be provided.
# <tt>dest</tt> can take one of two forms if overwriting: "id_to_overwrite?rev=revision" or the actual doc
# hash with a '_rev' key
@ -73,29 +103,6 @@ module CouchRest
@database || self.class.database
end
# saves an attachment directly to couchdb
def put_attachment(name, file, options={})
raise ArgumentError, "doc must be saved" unless self.rev
raise ArgumentError, "doc.database required to put_attachment" unless database
result = database.put_attachment(self, name, file, options)
self['_rev'] = result['rev']
result['ok']
end
# returns an attachment's data
def fetch_attachment(name)
raise ArgumentError, "doc must be saved" unless self.rev
raise ArgumentError, "doc.database required to put_attachment" unless database
database.fetch_attachment(self, name)
end
# deletes an attachment directly from couchdb
def delete_attachment(name)
raise ArgumentError, "doc.database required to delete_attachment" unless database
result = database.delete_attachment(self, name)
self['_rev'] = result['rev']
result['ok']
end
end
end

View file

@ -1,3 +1,3 @@
mixins_dir = File.join(File.dirname(__FILE__), 'mixins')
require File.join(mixins_dir, 'views')
require File.join(mixins_dir, 'attachments')

View file

@ -0,0 +1,31 @@
module CouchRest
module Mixins
module Attachments
# saves an attachment directly to couchdb
def put_attachment(name, file, options={})
raise ArgumentError, "doc must be saved" unless self.rev
raise ArgumentError, "doc.database required to put_attachment" unless database
result = database.put_attachment(self, name, file, options)
self['_rev'] = result['rev']
result['ok']
end
# returns an attachment's data
def fetch_attachment(name)
raise ArgumentError, "doc must be saved" unless self.rev
raise ArgumentError, "doc.database required to put_attachment" unless database
database.fetch_attachment(self, name)
end
# deletes an attachment directly from couchdb
def delete_attachment(name)
raise ArgumentError, "doc.database required to delete_attachment" unless database
result = database.delete_attachment(self, name)
self['_rev'] = result['rev']
result['ok']
end
end
end
end

View file

@ -1,59 +0,0 @@
module CouchRest
module Mixins
module Views
# alias for self['_id']
def id
self['_id']
end
# alias for self['_rev']
def rev
self['_rev']
end
# returns true if the document has never been saved
def new_document?
!rev
end
# Saves the document to the db using create or update. Also runs the :save
# callbacks. Sets the <tt>_id</tt> and <tt>_rev</tt> fields based on
# CouchDB's response.
# If <tt>bulk</tt> is <tt>true</tt> (defaults to false) the document is cached for bulk save.
def save(bulk = false)
raise ArgumentError, "doc.database required for saving" unless database
result = database.save_doc self, bulk
result['ok']
end
# Deletes the document from the database. Runs the :delete callbacks.
# Removes the <tt>_id</tt> and <tt>_rev</tt> fields, preparing the
# document to be saved to a new <tt>_id</tt>.
# If <tt>bulk</tt> is <tt>true</tt> (defaults to false) the document won't
# actually be deleted from the db until bulk save.
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
def copy(dest)
raise ArgumentError, "doc.database required to copy" unless database
result = database.copy_doc(self, dest)
result['ok']
end
def move(dest)
raise ArgumentError, "doc.database required to copy" unless database
result = database.move_doc(self, dest)
result['ok']
end
end
end
end