2008-11-04 07:52:50 +01:00
|
|
|
module CouchRest
|
|
|
|
class Response < Hash
|
|
|
|
def initialize keys = {}
|
|
|
|
keys.each do |k,v|
|
|
|
|
self[k.to_s] = v
|
|
|
|
end
|
|
|
|
end
|
|
|
|
def []= key, value
|
|
|
|
super(key.to_s, value)
|
|
|
|
end
|
|
|
|
def [] key
|
|
|
|
super(key.to_s)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Document < Response
|
|
|
|
|
2008-11-09 01:28:58 +01:00
|
|
|
attr_accessor :database
|
|
|
|
|
|
|
|
# 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
|
2008-11-21 02:03:06 +01:00
|
|
|
def new_document?
|
2008-11-09 01:28:58 +01:00
|
|
|
!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.
|
2008-12-15 17:27:53 +01:00
|
|
|
# If <tt>bulk</tt> is <tt>true</tt> (defaults to false) the document is cached for bulk save.
|
|
|
|
def save(bulk = false)
|
2008-11-09 01:28:58 +01:00
|
|
|
raise ArgumentError, "doc.database required for saving" unless database
|
2008-12-15 17:27:53 +01:00
|
|
|
result = database.save self, bulk
|
2008-11-22 01:21:20 +01:00
|
|
|
result['ok']
|
2008-11-09 01:28:58 +01:00
|
|
|
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>.
|
2009-01-09 10:59:08 +01:00
|
|
|
# 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)
|
2008-11-22 01:21:20 +01:00
|
|
|
raise ArgumentError, "doc.database required to destroy" unless database
|
2009-01-09 10:59:08 +01:00
|
|
|
result = database.delete(self, bulk)
|
2008-11-09 01:28:58 +01:00
|
|
|
if result['ok']
|
|
|
|
self['_rev'] = nil
|
|
|
|
self['_id'] = nil
|
|
|
|
end
|
|
|
|
result['ok']
|
|
|
|
end
|
|
|
|
|
2008-11-04 07:52:50 +01:00
|
|
|
end
|
2008-11-09 01:28:58 +01:00
|
|
|
|
2008-11-04 07:52:50 +01:00
|
|
|
|
2008-12-15 17:27:53 +01:00
|
|
|
end
|