moved stuff around and cleaned up some deprecation notices [save/save_doc]
This commit is contained in:
parent
fa29906900
commit
08c7f2107c
|
@ -14,7 +14,7 @@ module CouchRest
|
||||||
end
|
end
|
||||||
|
|
||||||
class Document < Response
|
class Document < Response
|
||||||
include CouchRest::Mixins::Views
|
include CouchRest::Mixins::Attachments
|
||||||
|
|
||||||
attr_accessor :database
|
attr_accessor :database
|
||||||
@@database = nil
|
@@database = nil
|
||||||
|
@ -38,6 +38,36 @@ module CouchRest
|
||||||
self['_rev']
|
self['_rev']
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# returns true if the document has never been saved
|
||||||
|
def new_document?
|
||||||
|
!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)
|
||||||
|
raise ArgumentError, "doc.database required for saving" unless database
|
||||||
|
result = database.save_doc self, bulk
|
||||||
|
result['ok']
|
||||||
|
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)
|
||||||
|
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
|
||||||
|
|
||||||
# copies the document to a new id. If the destination id currently exists, a rev must be provided.
|
# 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
|
# <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
|
# hash with a '_rev' key
|
||||||
|
@ -73,29 +103,6 @@ module CouchRest
|
||||||
@database || self.class.database
|
@database || self.class.database
|
||||||
end
|
end
|
||||||
|
|
||||||
# saves an attachment directly to couchdb
|
|
||||||
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
|
|
||||||
|
|
||||||
# returns an attachment's data
|
|
||||||
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
|
|
||||||
|
|
||||||
# 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
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
mixins_dir = File.join(File.dirname(__FILE__), 'mixins')
|
mixins_dir = File.join(File.dirname(__FILE__), 'mixins')
|
||||||
|
|
||||||
require File.join(mixins_dir, 'views')
|
require File.join(mixins_dir, 'attachments')
|
31
lib/couchrest/mixins/attachments.rb
Normal file
31
lib/couchrest/mixins/attachments.rb
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
module CouchRest
|
||||||
|
module Mixins
|
||||||
|
module Attachments
|
||||||
|
|
||||||
|
# saves an attachment directly to couchdb
|
||||||
|
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
|
||||||
|
|
||||||
|
# returns an attachment's data
|
||||||
|
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
|
||||||
|
|
||||||
|
# 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
|
||||||
|
end
|
|
@ -1,59 +0,0 @@
|
||||||
module CouchRest
|
|
||||||
module Mixins
|
|
||||||
module Views
|
|
||||||
|
|
||||||
# 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
|
|
||||||
def new_document?
|
|
||||||
!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)
|
|
||||||
raise ArgumentError, "doc.database required for saving" unless database
|
|
||||||
result = database.save_doc self, bulk
|
|
||||||
result['ok']
|
|
||||||
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)
|
|
||||||
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
|
|
||||||
|
|
||||||
def copy(dest)
|
|
||||||
raise ArgumentError, "doc.database required to copy" unless database
|
|
||||||
result = database.copy_doc(self, dest)
|
|
||||||
result['ok']
|
|
||||||
end
|
|
||||||
|
|
||||||
def move(dest)
|
|
||||||
raise ArgumentError, "doc.database required to copy" unless database
|
|
||||||
result = database.move_doc(self, dest)
|
|
||||||
result['ok']
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -244,7 +244,7 @@ describe CouchRest::Database do
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@db.save(@doc)
|
@db.save_doc(@doc)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should get the attachment with the doc's _id" do
|
it "should get the attachment with the doc's _id" do
|
||||||
|
@ -366,7 +366,7 @@ describe CouchRest::Database do
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@db.save(doc)
|
@db.save_doc(doc)
|
||||||
@doc = @db.get('mydocwithattachment')
|
@doc = @db.get('mydocwithattachment')
|
||||||
end
|
end
|
||||||
it "should delete the attachment" do
|
it "should delete the attachment" do
|
||||||
|
@ -672,7 +672,7 @@ describe CouchRest::Database do
|
||||||
|
|
||||||
describe "replicating a database" do
|
describe "replicating a database" do
|
||||||
before do
|
before do
|
||||||
@db.save({'_id' => 'test_doc', 'some-value' => 'foo'})
|
@db.save_doc({'_id' => 'test_doc', 'some-value' => 'foo'})
|
||||||
@other_db = @cr.database 'couchrest-test-replication'
|
@other_db = @cr.database 'couchrest-test-replication'
|
||||||
@other_db.delete! rescue nil
|
@other_db.delete! rescue nil
|
||||||
@other_db = @cr.create_db 'couchrest-test-replication'
|
@other_db = @cr.create_db 'couchrest-test-replication'
|
||||||
|
|
|
@ -142,10 +142,6 @@ describe CouchRest::Document do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "bulk saving" do
|
|
||||||
before :all do
|
|
||||||
@db = reset_test_db!
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "destroying a document from a db using bulk save" do
|
describe "destroying a document from a db using bulk save" do
|
||||||
before(:all) do
|
before(:all) do
|
||||||
|
@ -247,12 +243,13 @@ describe CouchRest::Document do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "dealing with attachments" do
|
describe "dealing with attachments" do
|
||||||
before do
|
before do
|
||||||
@db = reset_test_db!
|
@db = reset_test_db!
|
||||||
@attach = "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"
|
@attach = "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"
|
||||||
response = @db.save({'key' => 'value'})
|
response = @db.save_doc({'key' => 'value'})
|
||||||
@doc = @db.get(response['id'])
|
@doc = @db.get(response['id'])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -33,4 +33,10 @@ describe "ExtendedDocument properties" do
|
||||||
@card.family_name.should == @card.last_name
|
@card.family_name.should == @card.last_name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should be able to be validated" do
|
||||||
|
pending("need to add validation") do
|
||||||
|
@card.should be_valid
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
Loading…
Reference in a new issue