put attachments

This commit is contained in:
Chris Anderson 2008-09-30 17:22:54 -07:00
parent 902e1bed26
commit 2b7e49c9c6
3 changed files with 28 additions and 1 deletions

View file

@ -59,7 +59,18 @@ module CouchRest
RestClient.get "#{@root}/#{doc}/#{name}"
end
# PUT an attachment directly to CouchDB
def put_attachment doc, name, file, options = {}
docid = CGI.escape(doc['_id'])
name = CGI.escape(name)
uri = if doc['_rev']
"#{@root}/#{docid}/#{name}?rev=#{doc['_rev']}"
else
"#{@root}/#{docid}/#{name}"
end
JSON.parse(RestClient.put(uri, file, options))
end
# Save a document to CouchDB. This will use the <tt>_id</tt> field from the document as the id for PUT, or request a new UUID from CouchDB, if no <tt>_id</tt> is present on the document. IDs are attached to documents on the client side because POST has the curious property of being automatically retried by proxies in the event of network segmentation and lost responses.
def save doc

View file

@ -205,6 +205,22 @@ describe CouchRest::Database do
end
describe "PUT attachment from file" do
before(:each) do
filename = File.dirname(__FILE__) + '/../../fixtures/attachments/couchdb.png'
@file = File.open(filename)
end
after(:each) do
@file.close
end
it "should save the attachment to a new doc" do
r = @db.put_attachment({'_id' => 'attach-this'}, 'couchdb.png', image = @file.read, {:content_type => 'image/png'})
r['ok'].should == true
attachment = @db.fetch_attachment("attach-this","couchdb.png")
attachment.should == image
end
end
describe "PUT document with attachment" do
before(:each) do
@attach = "<html><head><title>My Doc</title></head><body><p>Has words.</p></body></html>"

BIN
spec/fixtures/attachments/couchdb.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB