Skip to content

Commit

Permalink
feat: events based on PouchDB’s .changes()
Browse files Browse the repository at this point in the history
BREAKING CHANGE:

Before, change events (incl. add, update, remove) have only been triggered when using the custom APIs like `.add()` or `.update()`. Now they get always triggered, including for changes replicated into the database.
  • Loading branch information
gr2m committed Feb 26, 2017
1 parent 3340682 commit 1958c42
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 70 deletions.
35 changes: 0 additions & 35 deletions helpers/eventify.js

This file was deleted.

3 changes: 1 addition & 2 deletions helpers/find-or-add-many.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
var toId = require('../utils/to-id')
var findMany = require('./find-many')
var addMany = require('./add-many')
var eventify = require('./eventify')

module.exports = function findOrAddMany (state, passedObjects) {
var self = this
Expand All @@ -22,7 +21,7 @@ module.exports = function findOrAddMany (state, passedObjects) {
}, [])

if (state) {
return eventify(self, state, addMany)(notFoundObjects)
return addMany.call(self, notFoundObjects)
}

return addMany.call(self, notFoundObjects)
Expand Down
3 changes: 1 addition & 2 deletions helpers/find-or-add-one.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ var Promise = require('lie')
var toId = require('../utils/to-id')
var findOne = require('./find-one')
var addOne = require('./add-one')
var eventify = require('./eventify')

function findOrAddOne (state, idOrObject, newObject) {
var self = this
Expand All @@ -30,7 +29,7 @@ function findOrAddOne (state, idOrObject, newObject) {
}

if (state) {
return eventify(self, state, addOne)(newObject)
return addOne.call(self, newObject)
}

return addOne.call(self, newObject)
Expand Down
18 changes: 18 additions & 0 deletions helpers/start-listen-to-changes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module.exports = startListenToChanges

var toObject = require('../utils/to-object')

function startListenToChanges (state) {
this.changes({
since: 'now',
live: true,
include_docs: true
})
.on('change', function (change) {
var doc = change.doc

var eventName = doc.deletedAt ? 'remove' : doc.updatedAt ? 'update' : 'add'
state.emitter.emit(eventName, toObject(doc))
state.emitter.emit('change', eventName, toObject(doc))
})
}
19 changes: 10 additions & 9 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,26 @@
var exports = module.exports = { hoodieApi: hoodieApi }

var EventEmitter = require('events').EventEmitter

var eventify = require('./helpers/eventify')
var startListenToChanges = require('./helpers/start-listen-to-changes')

function hoodieApi (options) {
var state = {
emitter: options && options.emitter || new EventEmitter()
}

state.emitter.once('newListener', startListenToChanges.bind(this, state))

return {
db: this,
add: eventify(this, state, require('./add')),
add: require('./add').bind(this),
find: require('./find').bind(this),
findAll: require('./find-all').bind(this),
findOrAdd: require('./lib/find-or-add-with-events').bind(this, state),
update: eventify(this, state, require('./update')),
updateOrAdd: eventify(this, state, require('./update-or-add')),
updateAll: eventify(this, state, require('./update-all')),
remove: eventify(this, state, require('./remove'), 'remove'),
removeAll: eventify(this, state, require('./remove-all'), 'remove'),
findOrAdd: require('./find-or-add').bind(this),
update: require('./update').bind(this),
updateOrAdd: require('./update-or-add').bind(this),
updateAll: require('./update-all').bind(this),
remove: require('./remove').bind(this),
removeAll: require('./remove-all').bind(this),
on: require('./lib/on').bind(this, state),
one: require('./lib/one').bind(this, state),
off: require('./lib/off').bind(this, state),
Expand Down
20 changes: 0 additions & 20 deletions lib/find-or-add-with-events.js

This file was deleted.

7 changes: 5 additions & 2 deletions utils/add-timestamps.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
var now = require('./now')

module.exports = function addTimestamps (object) {
object.updatedAt = now()
object.createdAt = object.createdAt || object.updatedAt
if (object.createdAt) {
object.updatedAt = now()
} else {
object.createdAt = now()
}

if (object._deleted) {
object.deletedAt = object.deletedAt || object.updatedAt
Expand Down

0 comments on commit 1958c42

Please sign in to comment.