github
Advanced Search
  • Home
  • Pricing and Signup
  • Explore GitHub
  • Blog
  • Login

cloudhead / cradle

  • Admin
  • Watch Unwatch
  • Fork
  • Your Fork
  • Pull Request
  • Download Source
    • 32
    • 3
  • Source
  • Commits
  • Network (3)
  • Issues (4)
  • Downloads (0)
  • Wiki (1)
  • Graphs
  • Branch: master

click here to add a description

click here to add a homepage

  • Branches (1)
    • master ✓
  • Tags (0)
Sending Request…
Enable Donations

Pledgie Donations

Once activated, we'll place the following badge in your repository's detail box:
Pledgie_example
This service is courtesy of Pledgie.

a high-level, caching, CouchDB library for Node.js — Read more

  cancel

http://cloudhead.io/cradle

  cancel
  • Private
  • Read-Only
  • HTTP Read-Only

This URL has Read+Write access

fix + test for bulk_docs without array 
cloudhead (author)
Sun Feb 21 20:31:23 -0800 2010
commit  34c8fe214e95f240c4454accdf36a318d3dc4c1f
tree    dbbf4685f49b919d5340716269c7507e3b994a74
parent  34fb4c9213d01e3252a5bf2d7a5875a4700cbaab
cradle /
name age
history
message
file LICENSE Sun Feb 07 23:13:37 -0800 2010 basic README & LICENSE [cloudhead]
file README.md Sun Feb 21 20:04:43 -0800 2010 ws [cloudhead]
directory lib/ Sun Feb 21 20:31:23 -0800 2010 fix + test for bulk_docs without array [cloudhead]
file makefile Tue Feb 16 08:45:53 -0800 2010 makefile init - run the tests with `make` [cloudhead]
directory test/ Sun Feb 21 20:31:23 -0800 2010 fix + test for bulk_docs without array [cloudhead]
README.md

cradle

A high-level, caching, CouchDB client for Node.js

introduction

Cradle is an asynchronous javascript client for CouchDB. It is somewhat higher-level than most other CouchDB clients, requiring a little less knowledge of CouchDB's REST API. Cradle also has built-in write-through caching, giving you an extra level of speed, and making document updates and deletion easier. Cradle was built from the love of CouchDB and Node.js, and tries to make the most out of this wonderful marriage of technologies.

philosophy

The key concept here is the common ground shared by CouchDB and Node.js, that is, javascript. The other important aspect of this marriage is the asynchronous behaviors of both these technologies. Cradle tries to make use of these symmetries, whenever it can. Cradle's API, although closely knit with CouchDB's, isn't overly so. Whenever the API can be abstracted in a friendlier, simpler way, that's the route it takes. So even though a large part of the Cradle <--> CouchDB mappings are one to one, some Cradle functions, such as save(), can perform more than one operation, depending on how they are used.

synopsis

var cradle = require('cradle');
var db = new(cradle.Connection).database('starwars');

db.get('vador', function (err, doc) {
    doc.name; // 'Darth Vador'
    assert.equal(doc.force, 'dark');
});

db.save('skywalker', {
    force: 'light',
    name: 'Luke Skywalker'
}, function (err, res) {
    if (err) {
        // Handle error
    } else {
        // Handle success
    }
});

API

Cradle's API builds right on top of Node's asynch API. Every asynch method takes a callback as its last argument. The return value is an event.EventEmitter, so listeners can also be optionally added.

Opening a connection

new(cradle.Connection)('http://living-room.couch', 5984, {
    cache: true,
    raw: false
});

Defaults to 127.0.0.1:5984

Note that you can also use cradle.setup to set a global configuration:

cradle.setup({host: 'http://living-room.couch',
              options: {cache: true, raw: false}});
var c = new(cradle.Connection),
   cc = new(cradle.Connection)('173.45.66.92');

creating a database

var db = c.database('starwars');
db.create();

You can check if a database exists with the exists() method.

fetching a document (GET)

db.get('vador', function (err, doc) {
    sys.puts(doc);
});

If you want to get a specific revision for that document, you can pass it as the 2nd parameter to get().

Querying a view

db.view('characters/all', function (err, res) {
    res.forEach(function (row) {
        sys.puts(row.name + " is on the " +
                 row.force + " side of the force.");
    });
});

creating/updating documents

All saving and updating can be done with the save() database method.

with an id (PUT)

db.save('vador', {
    name: 'darth', force: 'dark'
}, function (err, res) {
    // Handle response
});

without an id (POST)

db.save({
    force: 'dark', name: 'Darth'
}, function (err, res) {
    // Handle response
});

updating an existing document with the revision

db.save('luke', '1-94B6F82', {
    force: 'dark', name: 'Luke'
}, function (err, res) {
    // Handle response
});

Note that when saving a document this way, CouchDB overwrites the existing document with the new one. If you want to update only certain fields of the document, you have to fetch it first (with get), make your changes, then resave it with the above method.

However, Cradle also comes with an update method, which attempts to merge your changes with a cached version of the document, and save it to the database:

db.update('luke', {jedi: true}, function (err, res) {
    // Luke is now a jedi,
    // but remains on the dark side of the force.
});

This only works because we previously saved a full version of 'luke', and the cache option is enabled.

bulk insertion

If you want to insert more than one document at a time, for performance reasons, you can pass an array to save():

db.save([
    {name: 'Yoda'},
    {name: 'Han Solo'},
    {name: 'Leia'}
], function (err, res) {
    // Handle response
});

creating views

Here we create a design document named 'characters', with two views: 'all' and 'darkside'.

db.save('_design/characters', {
    all: {
        map: function (doc) {
            if (doc.name) emit(doc.name, doc);
        }
    },
    darkside: {
        map: function (doc) {
            if (doc.name && doc.force == 'dark') {
                emit(null, doc);
            }
        }
    }
});

These views can later be queried with db.view('characters/all'), for example.

removing documents (DELETE)

To remove a document, you call the remove() method, passing the latest document revision.

db.remove('luke', '1-94B6F82', function (err, res) {
    // Handle response
});

If remove is called without a revision, and the document was recently fetched from the database, it will attempt to use the cached document's revision, providing caching is enabled.

Other API methods

CouchDB Server level

new(cradle.Connection).*
  • databases(): Get list of databases
  • config(): Get server config
  • info(): Get server information
  • stats(): Statistics overview
  • activeTasks(): Get list of currently active tasks
  • uuids(count): Get count list of UUIDs

database level

new(cradle.Connection).database('starwars').*
  • info(): Database information
  • all(): Get all documents
  • allBySeq(): Get all documents by sequence
  • compact(): Compact database
  • viewCleanup(): Cleanup old view data
Blog | Support | Training | Contact | API | Status | Twitter | Help | Security
© 2010 GitHub Inc. All rights reserved. | Terms of Service | Privacy Policy
Powered by the Dedicated Servers and
Cloud Computing of Rackspace Hosting®
Dedicated Server
ZW5kZW5yYWhheXU5QGdtYWlsLmNvbQ==