Class: CouchRest::Document

Inherits:
Response
  • Object
show all
Includes:
Mixins::Views
Defined in:
lib/couchrest/core/document.rb

Direct Known Subclasses

Design, Model

Constant Summary collapse

@@database =
nil

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Response

#[], #[]=, #initialize

Constructor Details

This class inherits a constructor from CouchRest::Response

Instance Attribute Details

#databaseObject

Returns the document’s database



72
73
74
# File 'lib/couchrest/core/document.rb', line 72

def database
  @database
end

Class Method Details

.databaseObject



29
30
31
# File 'lib/couchrest/core/document.rb', line 29

def self.database
  @@database
end

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



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

def self.use_database(db)
  @@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)


44
45
46
47
48
# File 'lib/couchrest/core/document.rb', line 44

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

#delete_attachment(name) ⇒ Object

deletes an attachment directly from couchdb

Raises:

  • (ArgumentError)


93
94
95
96
97
98
# File 'lib/couchrest/core/document.rb', line 93

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

#fetch_attachment(name) ⇒ Object

returns an attachment’s data

Raises:

  • (ArgumentError)


86
87
88
89
90
# File 'lib/couchrest/core/document.rb', line 86

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

#idObject



33
34
35
# File 'lib/couchrest/core/document.rb', line 33

def id
  self['_id']
end

#move(dest) ⇒ Object

moves 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)


53
54
55
56
57
# File 'lib/couchrest/core/document.rb', line 53

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

#put_attachment(name, file, options = {}) ⇒ Object

saves an attachment directly to couchdb

Raises:

  • (ArgumentError)


77
78
79
80
81
82
83
# File 'lib/couchrest/core/document.rb', line 77

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

#revObject



37
38
39
# File 'lib/couchrest/core/document.rb', line 37

def rev
  self['_rev']
end

#uri(append_rev = false) ⇒ Object

Returns the CouchDB uri for the document



60
61
62
63
64
65
66
67
68
69
# File 'lib/couchrest/core/document.rb', line 60

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