Class: CouchRest::Document

Inherits:
Response
  • Object
show all
Extended by:
InheritableAttributes
Includes:
Attachments
Defined in:
lib/couchrest/document.rb

Direct Known Subclasses

Design, ExtendedDocument

Instance Attribute Summary collapse

Attributes inherited from Response

#headers, #raw

Class Method Summary collapse

Instance Method Summary collapse

Methods included from InheritableAttributes

couchrest_inheritable_accessor, couchrest_inheritable_reader, couchrest_inheritable_writer

Methods included from Attachments

#delete_attachment, #fetch_attachment, #put_attachment

Methods inherited from Response

#[], #[]=, #delete, #initialize

Constructor Details

This class inherits a constructor from CouchRest::Response

Instance Attribute Details

#databaseObject

Returns the document’s database



83
84
85
# File 'lib/couchrest/document.rb', line 83

def database
  @database
end

Class Method Details

.use_database(db) ⇒ Object

override the CouchRest::Model-wide default_database This is not a thread safe operation, do not change the model database at runtime.



14
15
16
# File 'lib/couchrest/document.rb', line 14

def self.use_database(db)
  self.database = db
end

Instance Method Details

#copy(dest) ⇒ Object

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

Raises:

  • (ArgumentError)


64
65
66
67
68
# File 'lib/couchrest/document.rb', line 64

def copy(dest)
  raise ArgumentError, "doc.database required to copy" unless database
  result = database.copy_doc(self, dest)
  result['ok']
end

#destroy(bulk = false) ⇒ Object

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.

Raises:

  • (ArgumentError)


51
52
53
54
55
56
57
58
59
# File 'lib/couchrest/document.rb', line 51

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

#idObject



18
19
20
# File 'lib/couchrest/document.rb', line 18

def id
  self['_id']
end

#id=(id) ⇒ Object



22
23
24
# File 'lib/couchrest/document.rb', line 22

def id=(id)
  self['_id'] = id
end

#new?Boolean Also known as: new_document?

returns true if the document has never been saved

Returns:

  • (Boolean)


31
32
33
# File 'lib/couchrest/document.rb', line 31

def new?
  !rev
end

#revObject



26
27
28
# File 'lib/couchrest/document.rb', line 26

def rev
  self['_rev']
end

#save(bulk = false) ⇒ Object

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.

Raises:

  • (ArgumentError)


40
41
42
43
44
# File 'lib/couchrest/document.rb', line 40

def save(bulk = false)
  raise ArgumentError, "doc.database required for saving" unless database
  result = database.save_doc self, bulk
  result['ok']
end

#uri(append_rev = false) ⇒ Object

Returns the CouchDB uri for the document



71
72
73
74
75
76
77
78
79
80
# File 'lib/couchrest/document.rb', line 71

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