83d7341553
Properties got added, they define getters, setters and aliases. They will also be the base of the new validation system.
91 lines
2.7 KiB
Ruby
91 lines
2.7 KiB
Ruby
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
|
|
include CouchRest::Mixins::Views
|
|
|
|
attr_accessor :database
|
|
@@database = nil
|
|
|
|
# override the CouchRest::Model-wide default_database
|
|
# This is not a thread safe operation, do not change the model
|
|
# database at runtime.
|
|
def self.use_database(db)
|
|
@@database = db
|
|
end
|
|
|
|
def self.database
|
|
@@database
|
|
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
|
|
def copy(dest)
|
|
raise ArgumentError, "doc.database required to copy" unless database
|
|
result = database.copy_doc(self, dest)
|
|
result['ok']
|
|
end
|
|
|
|
# moves 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
|
|
def move(dest)
|
|
raise ArgumentError, "doc.database required to copy" unless database
|
|
result = database.move_doc(self, dest)
|
|
result['ok']
|
|
end
|
|
|
|
# Returns the CouchDB uri for the document
|
|
def uri(append_rev = false)
|
|
return nil if new_document?
|
|
couch_uri = "http://#{database.uri}/#{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
|
|
|
|
# Returns the document's database
|
|
def database
|
|
@database || self.class.database
|
|
end
|
|
|
|
# saves an attachment directly to couchdb
|
|
def put_attachment(name, file, options={})
|
|
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.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
|