/pouchdb-hoodie-api

:dog: Hoodie-like API for PouchDB

Primary LanguageJavaScriptApache License 2.0Apache-2.0

pouchdb-hoodie-api

Hoodie-like API for PouchDB

Build Status Coverage Status Dependency Status devDependency Status

NPM

This plugin provides simple methods to add, find, update and remove data.

Usage

Initialisation

var db = new PouchDB('dbname')
var api = db.hoodieApi()

API

// Options
// emitter: Optionally pass an instance of EventEmitter for hoodieApi to use

var db = new PouchDB('dbname')
var api = db.hoodieApi({
  emitter: existingEventEmitter
})

// all methods return promises
api.add(object)
api.add([object1, id2])
api.find(id)
api.find(object) // with id property
api.find([object1, id2])
api.findOrAdd(id, object)
api.findOrAdd(object)
api.findOrAdd([object1, object2])
api.findAll()
api.findAll(filterFunction)
api.update(id, changedProperties)
api.update(id, updateFunction)
api.update(object)
api.update([object1, object2])
api.updateOrAdd(id, object)
api.updateOrAdd(object)
api.updateOrAdd([object1, object2])
api.updateAll(changedProperties)
api.updateAll(updateFunction)
api.remove(id)
api.remove(object)
api.remove([object1, id2])
api.removeAll()
api.removeAll(filterFunction)
api.clear()

// events
// Important: the order of when the methods promises resolve and the events get
//            triggered cannot be guaranteed as we rely on PouchDB’s .changes().
//            We would love to enforce promises to resolve after changes get
//            emitted, but the required complexity to do that is not worth it.
api.on('add', function(object, options) {})
api.on('update', function(object, options) {})
api.on('remove', function(object, options) {})
api.on('change', function(eventName, object, options) {})
api.on('clear', function() {})
api.one(eventName, eventHandlerFunction)
api.off(eventName, eventHandlerFunction)

// returns an API with all methods above, but implicitly scoped to the passed
// id prefix. Meaning events are only triggered for documents that match the id
// prefix, and documents are not found unless they have the id prefix.
// See https://github.com/hoodiehq/discussion/issues/106 for more context.
var todoStore = api.withIdPrefix('todo/')
todoStore.on('change', renderTodoList)
todoStore.add({text: 'Remember the milk!'})

// original PouchDB (http://pouchdb.com/api.html) instance used for the store
api.db

Full API documentation is available at: http://hoodiehq.github.io/pouchdb-hoodie-api/

Installation

Install via npm

npm install pouchdb
npm install pouchdb-hoodie-api

Including the plugin

With browserify or on node.js

Attach this plugin to the PouchDB object:

var PouchDB = require('pouchdb')
PouchDB.plugin(require('pouchdb-hoodie-api'))

In the browser

Include this plugin after pouchdb.js in your HTML page:

<script src="node_modules/pouchdb/dist/pouchdb.js"></script>
<script src="node_modules/pouchdb-hoodie-api/dist/pouchdb-hoodie-api.js"></script>

Testing

Sauce Test Status

In Node.js

Run all tests and validates JavaScript Code Style using standard

npm test

To run only the tests

npm run test:node

In the browser

test:browser:local

This will start a local server. All tests and coverage will be run at http://localhost:8080/__zuul

Contributing

Have a look at the Hoodie project's contribution guidelines. If you want to hang out you can join #hoodie-pouch on our Hoodie Community Slack.

License

Apache 2.0