-
Notifications
You must be signed in to change notification settings - Fork 133
Usage Overview
Douglas Tarr edited this page May 15, 2017
·
12 revisions
require 'couchrest'
@db = CouchRest.database("http://127.0.0.1:5984/couchrest-test")
CouchRest.database!
creates the database if it doesn't already exist:
@db = CouchRest.database!("http://127.0.0.1:5984/couchrest-test")
If you require authentication, include the credentials in the URL as follows:
@db = CouchRest.database("http://user:password@127.0.0.1:5984/couchrest-test")
# create
response = @db.save_doc({:key => 'value', 'another key' => 'another value'})
# => {"ok"=>true, "id"=>"e0d70033da0fad3707fed320bd5e5de2", "rev"=>"1-cbb61d1f90f7c01b273737702265b6c8"}
# fetch by id
doc = @db.get(response['id'])
# => #<CouchRest::Document _id: "e0d70033da0fad3707fed320bd5e5de2", _rev: "1-cbb61d1f90f7c01b273737702265b6c8", key: "value", another key: "another value">
# update
doc["boogie"] = true
@db.save_doc(doc)
# => {"ok"=>true, "id"=>"e0d70033da0fad3707fed320bd5e5de2", "rev"=>"2-3b067cc9f01fdf25814445088403382c"}
doc["_rev"]
# => "2-3b067cc9f01fdf25814445088403382c" <- notice it modified the doc _rev
contents = "<html><body>If you're happy and you know it, clap your hands.</body></html>"
@db.put_attachment(doc, "happy.html", contents, :content_type => "text/html")
# => {"ok"=>true, "id"=>"e0d70033da0fad3707fed320bd7e0770", "rev"=>"2-20635570c75e8b20f7a73fd1538f318d"}
# NOTE: The document is not updated automatically with the attachment information
pp doc.to_hash
# {"_id"=>"e0d70033da0fad3707fed320bd7e0770",
# "_rev"=>"1-cbb61d1f90f7c01b273737702265b6c8",
# "key"=>"value",
# "another key"=>"another value"}
# If you try to fetch the attachment without getting the new state of the document, you will fail
@db.fetch_attachment(doc, "happy.html")
# => RestClient::ResourceNotFound: 404 Resource Not Found: {"error":"not_found","reason":"Document is missing attachment"}
doc = @db.get(doc["_id"])
pp doc.to_hash
# {"_id"=>"e0d70033da0fad3707fed320bd7e0770",
# "_rev"=>"2-20635570c75e8b20f7a73fd1538f318d",
# "key"=>"value",
# "another key"=>"another value",
# "_attachments"=>
# {"happy.html"=>
# {"content_type"=>"text/html",
# "revpos"=>2,
# "digest"=>"md5-q3MreM1aJgfSLHGrJLdg4g==",
# "length"=>75,
# "stub"=>true}}}
@db.fetch_attachment(doc, "happy.html")
=> "<html><body>If you're happy and you know it, clap your hands.</body></html>"
Option 1: Simply remove the metadata from the doc and save
doc["_attachments"].delete("happy.html") # note, this is just using Hash#delete
# => {"content_type"=>"text/html", "revpos"=>4, "digest"=>"md5-q3MreM1aJgfSLHGrJLdg4g==", "length"=>75, "stub"=>true}
@db.save_doc(doc)
# => {"content_type"=>"text/html", "revpos"=>4, "digest"=>"md5-q3MreM1aJgfSLHGrJLdg4g==", "length"=>75, "stub"=>true}
pp doc.to_hash
# {"_id"=>"e0d70033da0fad3707fed320bd7dfbac",
# "_rev"=>"3-89acbafa837098c131e6ac04026b4a1b",
# "key"=>"value",
# "another key"=>"another value",
# "_attachments"=>{}}
Option 2: Use the delete_attachment method
@db.delete_attachment(doc, "happy.html")
# => {"ok"=>true, "id"=>"e0d70033da0fad3707fed320bd7df13c", "rev"=>"3-d81116a00196640df650e77c42459969"}
doc.to_json
# => "{\"_id\":\"e0d70033da0fad3707fed320bd5e5de2\",\"_rev\":\"1-cbb61d1f90f7c01b273737702265b6c8\",\"key\":\"value\",\"another key\":\"another value\"}"
pp doc.to_hash
# {"_id"=>"e0d70033da0fad3707fed320bd5e5de2",
# "_rev"=>"1-cbb61d1f90f7c01b273737702265b6c8",
# "key"=>"value",
# "another key"=>"another value"}
doc["_rev"]
# => "1-cbb61d1f90f7c01b273737702265b6c8"
doc["another key"] = "boogie"
doc.save
# => true
# The _rev is automatically updated
doc["_rev"]
# => "2-3b067cc9f01fdf25814445088403382c"
pp @db.bulk_save([
{"wild" => "and random"},
{"mild" => "yet local"},
{"another" => ["set","of","keys"]}
])
# [{"id"=>"e0d70033da0fad3707fed320bd5e5b5e",
# "rev"=>"1-ba668e67fa88ff8c39bb26f0023f5006"},
# {"id"=>"e0d70033da0fad3707fed320bd5e51fa",
# "rev"=>"1-8b763b91759b1db7cd9683eb5290b6a9"},
# {"id"=>"e0d70033da0fad3707fed320bd5e4a72",
# "rev"=>"1-9357f0bc3307f4e1391b82b263be637c"}]
@db.save_doc({
"_id" => "_design/first",
:views => {
:test => {
:map => "function(doc){for(var w in doc){ if(!w.match(/^_/))emit(w,doc[w])}}"
}
}
})
puts @db.view('first/test')['rows'].inspect
@db.replicate_to(@other_db)
Note: You must be authenticated as an admin to create design documents.