Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/joeybaker/wheelhouse-couch


https://github.com/joeybaker/wheelhouse-couch

Last synced: 6 days ago
JSON representation

Awesome Lists containing this project

README

        

wheelhouse-couch
=======================

[![NPM](https://nodei.co/npm/wheelhouse-couch.png)](https://nodei.co/npm/wheelhouse-couch/)

A wheelhouse package for using Backbone server side with [flatiron](https://github.com/flatiron/flatiron). This sets Couch as the data store for the server and is largely a rewrite of [backbone-couch](https://github.com/developmentseed/backbone-couch). CouchDB communication is via the excellent [cradle](https://github.com/cloudhead/cradle) CouchDB library.

## Usage
```js
var flatiron = require('flatiron')
, app = flatiron.app
, dbPlugin = require('wheelhouse-couch')

app.use(flatiron.plugins.http, {})
app.use(dbPlugin, {
name: 'database-name'
, host: 'localhost' // default
, port: 5984 // default
// also takes cradle options
, cache: false // disabled by default b/c cradle's cache doesn't play nicely if your app is hosted on multiple servers
, raw: false // cradle default
// additional advanced options
, getId: function(model){ // used internally to get the DB id from the model. the default behavior follows: {{collectionName}}/{{UUID}}
return model.url().substring(1) // default
}
, getCollectionName: function(collection){
// you might want to override this if your collection urls don't match your collection names
// e.g. if your collection url is '/api/collectionName', you could use: `return collection.url.split('/')[2]`
return collection.url.substring(1) // default
}
}, function(){} // do something after the database connection has been established
)
app.start(8999)
```

After using the plugin, `Backbone.sync` is overridden to use CouchDB on the server.

```js
app.config.set('db:name', 'database-name')
app.config.set('db:host', 'localhost')
app.config.set('db:cache', true)
// …
```

### Important note:
Your models should override the default `id` attribute to use `_id`.

```js
var model = Backbone.Model.extend({
idAttribute: '_id'
})
```

## tests

### The grunt way
You must have [grunt-cli](https://github.com/gruntjs/grunt-cli) installed: `sudo npm i -g grunt-cli`
`npm test`

You'll need to have a user on your db with the username `test` and the password `test`.

### The Mocha way
`mocha test/specs -ui bdd`

## Changelog
## 0.4.4
**security fix** it is no longer possible to bypass the delete method by manually setting `isDeleted: true`

### 0.4.3
Updated publish process.

### 0.4.2
Send `updatedAt` and `createdAt` back out when they're modified.

### 0.4.1
Publish error

### 0.4.0
* **breaking change (kinda)** no longer automatically reading options from `app.config.get('db')` (this never really was operational anyway)
* update the `backbone/collection` view to only look at ids with a `/` in them… for performance.
* Add unit tests
* Updates retry on a document update conflict
* fix error callbacks. They now return just the response … which is as Backbone intended.
* many methods were private before. They're now exposed in `.internals`
* changes feed now removes attributes from the model that were deleted in the db
* the delete method is now much smarter… by just re-implementing the update method
* **new** `createdAt` and `updatedAt` are now automatically created and updated.

### 0.3.10
* on db update error, don't log the input. It leads to log pollution.

### 0.3.9
* pass `notOriginal` for changes feed upates. This enables ignoring of events on changes that are triggered on another server.

_formerly known as [flatiron-couch-backbone](http://github.com/joeybaker/flatiron-couch-backbone)_