Doing the simple stuff so you don't have to
Find a file
2008-09-07 14:15:07 -07:00
bin moved scripts to bin 2008-08-03 12:51:17 -07:00
examples/word_count deleted actual book files from example 2008-06-20 13:36:36 -07:00
lib removed enumerable monkeypatches from pager 2008-09-07 14:13:34 -07:00
spec CouchRest no longer uses POST for doc creation 2008-09-07 13:51:26 -07:00
utils created some utility scripts 2008-08-03 14:17:58 -07:00
couchrest.gemspec reved the gem version to 0.9.2 2008-09-07 14:15:07 -07:00
Rakefile touch 2008-06-20 15:06:11 -07:00
README.markdown fix readme url 2008-09-07 12:57:26 -07:00

CouchRest - CouchDB, close to the metal

CouchRest is based on CouchDB's couch.js test library, which I find to be concise, clear, and well designed. CouchRest lightly wraps CouchDB's HTTP API, managing JSON serialization, and remembering the URI-paths to CouchDB's API endpoints so you don't have to.

CouchRest's lighweight is designed to make a simple base for application and framework-specific object oriented APIs.

Easy Install

sudo gem install jchris-couchrest -s http://gems.github.com

Relax, it's RESTful

The core of Couchrest is Herokus excellent REST Client Ruby HTTP wrapper. REST Client takes all the nastyness of Net::HTTP and gives is a pretty face, while still giving you more control than Open-URI. I recommend it anytime youre interfacing with a well-defined web service.

Running the Specs

The most complete documentation is the spec/ directory. To validate your CouchRest install, from the project root directory run rake, or autotest (requires RSpec and optionally ZenTest for autotest support).

Examples

Quick Start:

# with !, it creates the database if it doesn't already exist
@db = CouchRest.database!("http://localhost:5984/couchrest-test")
response = @db.save({:key => 'value', 'another key' => 'another value'})
doc = @db.get(response['id'])
puts doc.inspect

Bulk Save:

@db.bulk_save([
    {"wild" => "and random"},
    {"mild" => "yet local"},
    {"another" => ["set","of","keys"]}
  ])
# returns ids and revs of the current docs
puts @db.documents.inspect 

Creating and Querying Views:

@db.save({
  "_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