Socket
Socket
Sign inDemoInstall

couchdb-worker

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

couchdb-worker - npm Package Compare versions

Comparing version 1.0.1 to 1.1.0

31

lib/couchdb-worker.js

@@ -30,4 +30,2 @@ /*

var db = require('nano')(options.db);
// check if document is processable, that is

@@ -52,2 +50,14 @@ // * it has no worker status at all (no worker touched it ever)

// initialize database connector
var db = require('nano')(options.db);
// initialize feed
var feed = db.follow(options.follow);
// context for processor function evaluation
var ctx = {
db: db,
feed: feed
};
function onchange(change) {

@@ -60,6 +70,4 @@ var doc = change.doc;

doc.worker_status[id].error = err;
feed.emit('worker:error', err, doc);
} else {
doc.worker_status[id].status = 'complete';
feed.emit('worker:complete', doc);
}

@@ -72,3 +80,3 @@

doc._rev = body.rev;
feed.emit('worker:committed', doc);
feed.emit('worker:complete', doc);
}

@@ -79,3 +87,3 @@

if (typeof next === 'function') {
next(err, doc);
next.apply(ctx, [err, doc]);
}

@@ -98,3 +106,5 @@ });

if (err) {
feed.emit('worker:error', err, doc);
if (err.error !== 'conflict') {
feed.emit('worker:error', err, doc);
}
return;

@@ -105,11 +115,6 @@ }

feed.emit('worker:triggered', doc);
process.apply({}, [doc, ondone]);
process.apply(ctx, [doc, ondone]);
});
}
// initialize feed
var feed = db.follow(options.follow);
// TODO: handle paused from outside in the meantime...

@@ -116,0 +121,0 @@ feed.on('change', onchange);

{
"name": "couchdb-worker",
"description": "CouchDB worker module that manages state",
"version": "1.0.1",
"version": "1.1.0",
"homepage": "https://github.com/jo/couchdb-worker",

@@ -6,0 +6,0 @@ "author": {

@@ -10,2 +10,3 @@ # couchdb-worker

var worker = require('couchdb-worker');
var myWorker = worker.listen({

@@ -19,20 +20,13 @@ id: 'my-worker',

});
myWorker.on('error', function(err) {
console.error('Since Follow always retries on errors, this must be serious');
});
myWorker.on('worker:triggered', function(doc) {
console.log('worker triggered: ', doc);
});
myWorker.on('worker:completed', function(doc) {
myWorker.on('worker:complete', function(doc) {
console.log('worker completed: ', doc);
});
myWorker.on('worker:committed', function(doc) {
console.log('worker committed: ', doc);
});
myWorker.on('worker:error', function(err, doc) {
console.log('worker error: ', err, doc);
});
// myWorker.status();
myWorker.pause();
myWorker.resume();
myWorker.stop();

@@ -62,5 +56,5 @@ ```

## Status
* couchdb-worker stores its state inside the document in an object called `worker_status`.
* Each worker manages its own state inside this object, eg `worker_status.myworker`.
* The state can be `triggered`, `error` or `complete`.
* couchdb-worker stores its status inside the document in an object called `worker_status`.
* Each worker manages its own status inside this object, eg `worker_status.myworker`.
* The status can be `triggered`, `error` or `complete`.
* Only one worker can run at a time on one document.

@@ -138,2 +132,3 @@ * You can store your own worker status information (a retry count for example)

Copyright (c) 2012-2013 Johannes J. Schmidt, null2 GmbH
Licensed under the MIT license.

@@ -66,3 +66,3 @@ 'use strict';

this.url = url.resolve(server, this.dbname);
nano.db.create(this.dbname, function(err) {

@@ -90,2 +90,29 @@ if (err) {

},
'process callback arguments': function(test) {
test.expect(3);
var w;
function process(doc, next) {
test.equal(typeof doc, 'object', 'doc should be an object');
test.equal(doc._id, 'mydoc', 'doc _id should be `mydoc`');
test.equal(typeof next, 'function', 'next should be a function');
w.stop();
test.done();
}
w = worker.listen({ db: this.url, id: 'myworker', process: process });
this.db.insert({}, 'mydoc');
},
'next callback arguments': function(test) {
test.expect(3);
function process(doc, next) {
next(null, function(err, doc) {
test.ok(!err, 'error should be null');
test.equal(typeof doc, 'object', 'doc should be an object');
test.equal(doc._id, 'mydoc', 'doc _id should be `mydoc`');
w.stop();
test.done();
});
}
var w = worker.listen({ db: this.url, id: 'myworker', process: process });
this.db.insert({}, 'mydoc');
},
'pause during process': function(test) {

@@ -105,13 +132,4 @@ test.expect(2);

},
'event worker:triggered': function(test) {
test.expect(1);
var w = worker.listen({ db: this.url, id: 'myworker', process: function() {} });
w.on('worker:triggered', function() {
test.ok(true, 'worker:triggered event should have been fired');
test.done();
});
this.db.insert({});
},
'event worker:committed': function(test) {
test.expect(1);
'event worker:complete': function(test) {
test.expect(3);
function process(doc, next) {

@@ -123,24 +141,10 @@ next(null, function() {

var w = worker.listen({ db: this.url, id: 'myworker', process: process });
w.on('worker:committed', function() {
test.ok(true, 'worker:committed event should have been fired');
w.on('worker:complete', function(doc) {
test.ok(true, 'worker:complete event should have been fired');
test.equal(typeof doc, 'object', 'doc should be an object');
test.equal(doc._id, 'mydoc', 'doc _id should be `mydoc`');
test.done();
});
this.db.insert({});
this.db.insert({}, 'mydoc');
},
'event worker:error': function(test) {
test.expect(1);
function process(doc, next) {
// let the status update fail
delete doc._rev;
next(null, function() {
w.stop();
});
}
var w = worker.listen({ db: this.url, id: 'myworker', process: process });
w.on('worker:error', function() {
test.ok(true, 'worker:error event should have been fired');
test.done();
});
this.db.insert({});
},
'worker status error info': function(test) {

@@ -161,13 +165,20 @@ test.expect(4);

},
'process arguments': function(test) {
test.expect(3);
var w;
'event worker:error': function(test) {
test.expect(5);
function process(doc, next) {
// let the status update fail
delete doc._rev;
next(null, function() {
w.stop();
});
}
var w = worker.listen({ db: this.url, id: 'myworker', process: process });
w.on('worker:error', function(err, doc) {
test.ok(true, 'worker:error event should have been fired');
test.equal(typeof err, 'object', 'err should be an object');
test.equal(err.error, 'conflict', 'err should be a `conflict`');
test.equal(typeof doc, 'object', 'doc should be an object');
test.equal(doc._id, 'mydoc', 'doc should have proper _id');
test.equal(typeof next, 'function', 'next should be a function');
w.stop();
test.equal(doc._id, 'mydoc', 'doc _id should be `mydoc`');
test.done();
}
w = worker.listen({ db: this.url, id: 'myworker', process: process });
});
this.db.insert({}, 'mydoc');

@@ -174,0 +185,0 @@ },

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc