From 97ba7ddb2c0a13c746b05f23431914f9bbd9e052 Mon Sep 17 00:00:00 2001 From: danw Date: Tue, 7 Aug 2012 09:59:09 +1000 Subject: [PATCH] Pass headers through to request. --- lib/stalka.js | 48 +++++++++++++++++++++++++++++++++++++++++++----- test/stalka.js | 26 ++++++++++++++++++-------- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/lib/stalka.js b/lib/stalka.js index 59fa778..35e13b5 100644 --- a/lib/stalka.js +++ b/lib/stalka.js @@ -7,9 +7,9 @@ module.exports = stalka(); /** * Module dependencies. */ - var request = require('request'); - var querystring = require('querystring'); - var async = require('async'); +var request = require('request'); +var querystring = require('querystring'); +var async = require('async'); /** * Constructor @@ -19,13 +19,39 @@ function stalka() { }; function Stalka() { + this.running = false; }; Stalka.prototype.stop = function() { this.running = false; } +Stalka.prototype.resume = function() { + this.start(this.dbUri, this.changesWriter, this.options, this.mainCallback); +} + +Stalka.prototype.isRunning = function() { + return this.running; +} + +Stalka.prototype.getLastSeq = function(callback) { + var db = require('nano')(this.dbUri); + this.readSequence(db, function(err, sequenceDoc) { + callback(err, sequenceDoc); + }); +} + +Stalka.prototype.registerStatsWriter = function(statsWriter) { + this.statsWriter = statsWriter; +}; + Stalka.prototype.start = function (dbUri, changesWriter, options, mainCallback) { + // Store so that we can use them to resume + this.dbUri = dbUri; + this.changesWriter = changesWriter; + this.options = options; + this.mainCallback = mainCallback; + this.running = true; var db = require('nano')(dbUri); @@ -76,7 +102,13 @@ Stalka.prototype.start = function (dbUri, changesWriter, options, mainCallback) callback(err); return; } else { + this.lastSequence = sequenceDoc.lastSequence; sequenceDoc._rev = newSeqDoc.rev; + + if (self.statsWriter) { + self.statsWriter(this.lastSequence); + } + callback(); } }); @@ -118,11 +150,17 @@ Stalka.prototype.updateSequence = function(db, sequenceDoc, callback) { Stalka.prototype.readChanges = function(dbUri, options, callback) { options = options || {}; + + if (options.headers) { + var headers = options.headers; + delete options['headers']; + } + headers = headers || {}; + if (!options.feed) { options.feed = 'longpoll'; } - - request(dbUri + '/_changes?' + querystring.stringify(options), function (error, response, body) { + request({url: dbUri + '/_changes?' + querystring.stringify(options), headers: headers}, function (error, response, body) { if (error) { callback(error, null); } else { diff --git a/test/stalka.js b/test/stalka.js index e967a12..0099a67 100644 --- a/test/stalka.js +++ b/test/stalka.js @@ -117,8 +117,8 @@ describe('Stalka', function() { }), describe('#readChanges', function() { it("should default the feed to 'longpoll'", function(done) { - var stalka = fakeRequestStalka(function(url, callback) { - url.should.include("feed=longpoll"); + var stalka = fakeRequestStalka(function(options, callback) { + options.url.should.include("feed=longpoll"); callback(); }); @@ -127,8 +127,8 @@ describe('Stalka', function() { }); }), it("should query with any extra options", function(done) { - var stalka = fakeRequestStalka(function(url, callback) { - url.should.include("pizza=yummy"); + var stalka = fakeRequestStalka(function(options, callback) { + options.url.should.include("pizza=yummy"); callback(); }); @@ -137,8 +137,8 @@ describe('Stalka', function() { }); }), it("should query with the correct base url", function(done) { - var stalka = fakeRequestStalka(function(url, callback) { - url.should.match(/^http:\/\/somehost:1234\/somedb\/_changes?.*/); + var stalka = fakeRequestStalka(function(options, callback) { + options.url.should.match(/^http:\/\/somehost:1234\/somedb\/_changes?.*/); callback(); }); @@ -147,7 +147,7 @@ describe('Stalka', function() { }); }), it("should return the changes on a successful read", function(done) { - var stalka = fakeRequestStalka(function(url, callback) { + var stalka = fakeRequestStalka(function(options, callback) { callback(null, null, {changes: 'yay'}); }); stalka.readChanges("http://somehost:1234/somedb", null, function(err, changes) { @@ -156,13 +156,23 @@ describe('Stalka', function() { }); }), it("should return the error on an unsuccessful read", function(done) { - var stalka = fakeRequestStalka(function(url, callback) { + var stalka = fakeRequestStalka(function(options, callback) { callback("Error reading changes", null, null); }); stalka.readChanges("http://somehost:1234/somedb", null, function(err, changes) { err.should.eql("Error reading changes"); done(); }); + }), + it("should pass through headers option and remove it from options", function(done) { + var stalka = fakeRequestStalka(function(options, callback) { + options.headers.should.eql({'xyz':1}); + options.url.should.not.include("xyz"); + callback(); + }); + stalka.readChanges("http://somehost:1234/somedb", { headers: { 'xyz':1 }}, function(err, changes) { + done(); + }); }); }), describe('#start', function() {