couchrest_model/lib/couchrest/core/document.rb

64 lines
1.6 KiB
Ruby
Raw Normal View History

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.
# 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
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>.
# 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
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
end