Skip to content

Commit

Permalink
added default route parameter in use method
Browse files Browse the repository at this point in the history
  • Loading branch information
kilianc committed Jun 1, 2012
1 parent cc37e55 commit 54708f9
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 74 deletions.
153 changes: 81 additions & 72 deletions lib-cov/apiserver.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,33 +29,33 @@ if (! _$jscoverage['apiserver.js']) {
_$jscoverage['apiserver.js'][49] = 0;
_$jscoverage['apiserver.js'][52] = 0;
_$jscoverage['apiserver.js'][53] = 0;
_$jscoverage['apiserver.js'][57] = 0;
_$jscoverage['apiserver.js'][58] = 0;
_$jscoverage['apiserver.js'][54] = 0;
_$jscoverage['apiserver.js'][55] = 0;
_$jscoverage['apiserver.js'][56] = 0;
_$jscoverage['apiserver.js'][60] = 0;
_$jscoverage['apiserver.js'][61] = 0;
_$jscoverage['apiserver.js'][62] = 0;
_$jscoverage['apiserver.js'][63] = 0;
_$jscoverage['apiserver.js'][64] = 0;
_$jscoverage['apiserver.js'][65] = 0;
_$jscoverage['apiserver.js'][66] = 0;
_$jscoverage['apiserver.js'][67] = 0;
_$jscoverage['apiserver.js'][68] = 0;
_$jscoverage['apiserver.js'][69] = 0;
_$jscoverage['apiserver.js'][70] = 0;
_$jscoverage['apiserver.js'][71] = 0;
_$jscoverage['apiserver.js'][72] = 0;
_$jscoverage['apiserver.js'][73] = 0;
_$jscoverage['apiserver.js'][74] = 0;
_$jscoverage['apiserver.js'][75] = 0;
_$jscoverage['apiserver.js'][76] = 0;
_$jscoverage['apiserver.js'][77] = 0;
_$jscoverage['apiserver.js'][78] = 0;
_$jscoverage['apiserver.js'][81] = 0;
_$jscoverage['apiserver.js'][82] = 0;
_$jscoverage['apiserver.js'][83] = 0;
_$jscoverage['apiserver.js'][87] = 0;
_$jscoverage['apiserver.js'][88] = 0;
_$jscoverage['apiserver.js'][92] = 0;
_$jscoverage['apiserver.js'][93] = 0;
_$jscoverage['apiserver.js'][94] = 0;
_$jscoverage['apiserver.js'][84] = 0;
_$jscoverage['apiserver.js'][85] = 0;
_$jscoverage['apiserver.js'][86] = 0;
_$jscoverage['apiserver.js'][90] = 0;
_$jscoverage['apiserver.js'][91] = 0;
_$jscoverage['apiserver.js'][95] = 0;
_$jscoverage['apiserver.js'][96] = 0;
_$jscoverage['apiserver.js'][97] = 0;
_$jscoverage['apiserver.js'][98] = 0;
_$jscoverage['apiserver.js'][99] = 0;
_$jscoverage['apiserver.js'][100] = 0;
_$jscoverage['apiserver.js'][101] = 0;
Expand All @@ -64,19 +64,22 @@ if (! _$jscoverage['apiserver.js']) {
_$jscoverage['apiserver.js'][104] = 0;
_$jscoverage['apiserver.js'][105] = 0;
_$jscoverage['apiserver.js'][106] = 0;
_$jscoverage['apiserver.js'][107] = 0;
_$jscoverage['apiserver.js'][108] = 0;
_$jscoverage['apiserver.js'][109] = 0;
_$jscoverage['apiserver.js'][110] = 0;
_$jscoverage['apiserver.js'][111] = 0;
_$jscoverage['apiserver.js'][112] = 0;
_$jscoverage['apiserver.js'][113] = 0;
_$jscoverage['apiserver.js'][114] = 0;
_$jscoverage['apiserver.js'][115] = 0;
_$jscoverage['apiserver.js'][116] = 0;
_$jscoverage['apiserver.js'][118] = 0;
_$jscoverage['apiserver.js'][120] = 0;
_$jscoverage['apiserver.js'][119] = 0;
_$jscoverage['apiserver.js'][121] = 0;
_$jscoverage['apiserver.js'][129] = 0;
_$jscoverage['apiserver.js'][130] = 0;
_$jscoverage['apiserver.js'][131] = 0;
_$jscoverage['apiserver.js'][138] = 0;
_$jscoverage['apiserver.js'][123] = 0;
_$jscoverage['apiserver.js'][124] = 0;
_$jscoverage['apiserver.js'][132] = 0;
_$jscoverage['apiserver.js'][133] = 0;
_$jscoverage['apiserver.js'][134] = 0;
_$jscoverage['apiserver.js'][141] = 0;
}
_$jscoverage['apiserver.js'][1]++;
var http = require("http"), url = require("url"), qs = require("qs"), util = require("util"), events = require("events"), bufferedRequest = require("buffered-request"), middleware = require("./middleware"), Router = require("apiserver-router"), Chain = require("fnchain");
Expand Down Expand Up @@ -134,117 +137,123 @@ ApiServer.prototype.addModule = (function (apiVersion, moduleName, module) {
return this;
});
_$jscoverage['apiserver.js'][52]++;
ApiServer.prototype.use = (function (route, middleware) {
ApiServer.prototype.use = (function () {
_$jscoverage['apiserver.js'][53]++;
var args = Array.prototype.slice.call(arguments);
_$jscoverage['apiserver.js'][54]++;
var middleware = args.pop();
_$jscoverage['apiserver.js'][55]++;
var route = args.pop() || /./;
_$jscoverage['apiserver.js'][56]++;
this.middlewareList.push({route: route, handle: middleware});
_$jscoverage['apiserver.js'][57]++;
_$jscoverage['apiserver.js'][60]++;
this.router.update(this.activeApiModules, this.middlewareList);
_$jscoverage['apiserver.js'][58]++;
_$jscoverage['apiserver.js'][61]++;
return this;
});
_$jscoverage['apiserver.js'][61]++;
_$jscoverage['apiserver.js'][64]++;
ApiServer.prototype.listen = (function () {
_$jscoverage['apiserver.js'][62]++;
_$jscoverage['apiserver.js'][65]++;
var arguments = Array.prototype.slice.call(arguments);
_$jscoverage['apiserver.js'][63]++;
_$jscoverage['apiserver.js'][66]++;
var port = this.port, hostname, callback;
_$jscoverage['apiserver.js'][64]++;
_$jscoverage['apiserver.js'][67]++;
arguments.forEach((function (arg) {
_$jscoverage['apiserver.js'][65]++;
_$jscoverage['apiserver.js'][68]++;
if (typeof arg === "function") {
_$jscoverage['apiserver.js'][66]++;
_$jscoverage['apiserver.js'][69]++;
callback = arg;
_$jscoverage['apiserver.js'][67]++;
_$jscoverage['apiserver.js'][70]++;
return;
}
_$jscoverage['apiserver.js'][69]++;
_$jscoverage['apiserver.js'][72]++;
if (typeof arg === "string" && isNaN(Number(arg))) {
_$jscoverage['apiserver.js'][70]++;
_$jscoverage['apiserver.js'][73]++;
hostname = arg;
_$jscoverage['apiserver.js'][71]++;
_$jscoverage['apiserver.js'][74]++;
return;
}
_$jscoverage['apiserver.js'][73]++;
_$jscoverage['apiserver.js'][76]++;
if (! isNaN(Number(arg))) {
_$jscoverage['apiserver.js'][74]++;
_$jscoverage['apiserver.js'][77]++;
port = arg;
_$jscoverage['apiserver.js'][75]++;
_$jscoverage['apiserver.js'][78]++;
return;
}
}));
_$jscoverage['apiserver.js'][78]++;
_$jscoverage['apiserver.js'][81]++;
this.server.listen(port, hostname, callback);
});
_$jscoverage['apiserver.js'][81]++;
_$jscoverage['apiserver.js'][84]++;
ApiServer.prototype.close = (function (callback) {
_$jscoverage['apiserver.js'][82]++;
_$jscoverage['apiserver.js'][85]++;
callback && this.server.once("close", callback);
_$jscoverage['apiserver.js'][83]++;
_$jscoverage['apiserver.js'][86]++;
this.server.close();
});
_$jscoverage['apiserver.js'][87]++;
_$jscoverage['apiserver.js'][90]++;
Object.keys(middleware).forEach((function (middlewareName) {
_$jscoverage['apiserver.js'][88]++;
_$jscoverage['apiserver.js'][91]++;
module.exports[middlewareName] = middleware[middlewareName];
}));
_$jscoverage['apiserver.js'][92]++;
_$jscoverage['apiserver.js'][95]++;
function onRequest(request, response) {
_$jscoverage['apiserver.js'][93]++;
_$jscoverage['apiserver.js'][96]++;
var self = this;
_$jscoverage['apiserver.js'][94]++;
_$jscoverage['apiserver.js'][97]++;
var end = response.end;
_$jscoverage['apiserver.js'][96]++;
_$jscoverage['apiserver.js'][99]++;
request.requestedAt = new Date().getTime();
_$jscoverage['apiserver.js'][97]++;
_$jscoverage['apiserver.js'][100]++;
request.parsedUrl = url.parse(request.url, true);
_$jscoverage['apiserver.js'][98]++;
_$jscoverage['apiserver.js'][101]++;
request.pathname = request.parsedUrl.pathname.replace(/\/\/+/g, "/");
_$jscoverage['apiserver.js'][99]++;
_$jscoverage['apiserver.js'][102]++;
request.querystring = qs.parse(request.parsedUrl.search.replace(/^\?/, ""));
_$jscoverage['apiserver.js'][100]++;
_$jscoverage['apiserver.js'][103]++;
request.makeBuffered();
_$jscoverage['apiserver.js'][101]++;
_$jscoverage['apiserver.js'][104]++;
request.pause();
_$jscoverage['apiserver.js'][102]++;
_$jscoverage['apiserver.js'][105]++;
request.timeout = setInterval((function () {
_$jscoverage['apiserver.js'][103]++;
_$jscoverage['apiserver.js'][106]++;
response.writeHead(408);
_$jscoverage['apiserver.js'][104]++;
_$jscoverage['apiserver.js'][107]++;
end.call(response);
_$jscoverage['apiserver.js'][105]++;
_$jscoverage['apiserver.js'][108]++;
clearInterval(request.timeout);
_$jscoverage['apiserver.js'][106]++;
_$jscoverage['apiserver.js'][109]++;
self.emit("timeout", request.url);
}), this.timeout);
_$jscoverage['apiserver.js'][109]++;
_$jscoverage['apiserver.js'][112]++;
response.end = (function () {
_$jscoverage['apiserver.js'][110]++;
_$jscoverage['apiserver.js'][113]++;
clearInterval(request.timeout);
_$jscoverage['apiserver.js'][111]++;
_$jscoverage['apiserver.js'][114]++;
end.apply(this, arguments);
_$jscoverage['apiserver.js'][112]++;
_$jscoverage['apiserver.js'][115]++;
self.emit("requestEnd", request.url, new Date().getTime() - request.requestedAt);
});
_$jscoverage['apiserver.js'][115]++;
_$jscoverage['apiserver.js'][118]++;
this.emit("requestStart", request.url, request.requestedAt);
_$jscoverage['apiserver.js'][116]++;
_$jscoverage['apiserver.js'][119]++;
this.JSONTransport(request, response);
_$jscoverage['apiserver.js'][118]++;
_$jscoverage['apiserver.js'][121]++;
var executionChain = this.router.get(request);
_$jscoverage['apiserver.js'][120]++;
_$jscoverage['apiserver.js'][123]++;
if (! executionChain) {
_$jscoverage['apiserver.js'][121]++;
_$jscoverage['apiserver.js'][124]++;
return response.serveJSON({success: false, reason: request.pathname + " api not found"}, {httpStatusCode: 404});
}
_$jscoverage['apiserver.js'][129]++;
_$jscoverage['apiserver.js'][132]++;
new Chain(executionChain, (function (err) {
_$jscoverage['apiserver.js'][130]++;
_$jscoverage['apiserver.js'][133]++;
if (err) {
_$jscoverage['apiserver.js'][131]++;
_$jscoverage['apiserver.js'][134]++;
response.serveJSON({success: false, reason: "something went wrong: " + err, stack: err.stack}, {httpStatusCode: 500});
_$jscoverage['apiserver.js'][138]++;
_$jscoverage['apiserver.js'][141]++;
self.emit("error", request.url, err);
}
})).call(request, response);
}
_$jscoverage['apiserver.js'].source = ["var http = require('http'),"," url = require('url'),"," qs = require('qs'),"," util = require('util'),"," events = require('events'),"," bufferedRequest = require('buffered-request'),"," middleware = require('./middleware'),"," Router = require('apiserver-router'),"," Chain = require('fnchain')","","var ApiServer = module.exports = function (options) {"," var self = this"," ApiServer.super_.call(this)",""," options = (options !== null && options !== undefined && options.constructor === Object) ? options : {}"," options.timeout = !options.timeout || options.timeout < 0 ? 15000 : options.timeout"," options.standardHeaders = options.standardHeaders || {"," 'cache-control': 'max-age=0, no-cache, no-store, must-revalidate',"," 'expires': 0,"," 'pragma': 'no-cache',"," 'x-server': 'ApiServer v' + ApiServer.version + ' raging on nodejs ' + process.version"," }"," options.port = options.port || 8080"," options.server = options.server || http.createServer()"," options.router = options.router || new Router()",""," Object.keys(options).forEach(function (key) {"," if (!self.__proto__.hasOwnProperty(key)) {"," self[key] = options[key]"," }"," })",""," this.JSONTransport = middleware.JSONTransport(this, options)"," this.middlewareList = []"," this.activeApiModules = {}"," this.server.on('request', onRequest.bind(this))","}","","module.exports.version = require('../package').version","","util.inherits(module.exports, events.EventEmitter)","","ApiServer.prototype.addModule = function (apiVersion, moduleName, module) {"," if (this.activeApiModules[apiVersion] === undefined) {"," this.activeApiModules[apiVersion] = Object.create(null)"," }"," this.activeApiModules[apiVersion][moduleName] = module"," this.router.update(this.activeApiModules, this.middlewareList)"," return this","}","","ApiServer.prototype.use = function (route, middleware) {"," this.middlewareList.push({"," route: route,"," handle: middleware"," })"," this.router.update(this.activeApiModules, this.middlewareList)"," return this","}","","ApiServer.prototype.listen = function () {"," var arguments = Array.prototype.slice.call(arguments)"," var port = this.port, hostname, callback"," arguments.forEach(function (arg) {"," if (typeof arg === 'function') {"," callback = arg"," return"," }"," if (typeof arg === 'string' && isNaN(Number(arg))) {"," hostname = arg"," return"," }"," if (!isNaN(Number(arg))) {"," port = arg"," return"," }"," })"," this.server.listen(port, hostname, callback)","}","","ApiServer.prototype.close = function (callback) {"," callback && this.server.once('close', callback)"," this.server.close()","}","","// export middleware","Object.keys(middleware).forEach(function (middlewareName) {"," module.exports[middlewareName] = middleware[middlewareName]","})","","// private","function onRequest(request, response) {"," var self = this"," var end = response.end",""," request.requestedAt = new Date().getTime()"," request.parsedUrl = url.parse(request.url, true)"," request.pathname = request.parsedUrl.pathname.replace(/\\/\\/+/g, '/')"," request.querystring = qs.parse(request.parsedUrl.search.replace(/^\\?/, ''))"," request.makeBuffered()"," request.pause()"," request.timeout = setInterval(function () {"," response.writeHead(408)"," end.call(response)"," clearInterval(request.timeout)"," self.emit('timeout', request.url)"," }, this.timeout)",""," response.end = function () {"," clearInterval(request.timeout)"," end.apply(this, arguments)"," self.emit('requestEnd', request.url, new Date().getTime() - request.requestedAt)"," }",""," this.emit('requestStart', request.url, request.requestedAt)"," this.JSONTransport(request, response)",""," var executionChain = this.router.get(request)",""," if (!executionChain) {"," return response.serveJSON({"," success: false,"," reason: request.pathname + ' api not found'"," }, {"," httpStatusCode: 404,"," })"," }",""," new Chain(executionChain, function (err) {"," if (err) {"," response.serveJSON({"," success: false,"," reason: 'something went wrong: ' + err,"," stack: err.stack"," }, {"," httpStatusCode: 500"," })"," self.emit('error', request.url, err)"," }"," }).call(request, response)","}"];
_$jscoverage['apiserver.js'].source = ["var http = require('http'),"," url = require('url'),"," qs = require('qs'),"," util = require('util'),"," events = require('events'),"," bufferedRequest = require('buffered-request'),"," middleware = require('./middleware'),"," Router = require('apiserver-router'),"," Chain = require('fnchain')","","var ApiServer = module.exports = function (options) {"," var self = this"," ApiServer.super_.call(this)",""," options = (options !== null && options !== undefined && options.constructor === Object) ? options : {}"," options.timeout = !options.timeout || options.timeout < 0 ? 15000 : options.timeout"," options.standardHeaders = options.standardHeaders || {"," 'cache-control': 'max-age=0, no-cache, no-store, must-revalidate',"," 'expires': 0,"," 'pragma': 'no-cache',"," 'x-server': 'ApiServer v' + ApiServer.version + ' raging on nodejs ' + process.version"," }"," options.port = options.port || 8080"," options.server = options.server || http.createServer()"," options.router = options.router || new Router()",""," Object.keys(options).forEach(function (key) {"," if (!self.__proto__.hasOwnProperty(key)) {"," self[key] = options[key]"," }"," })",""," this.JSONTransport = middleware.JSONTransport(this, options)"," this.middlewareList = []"," this.activeApiModules = {}"," this.server.on('request', onRequest.bind(this))","}","","module.exports.version = require('../package').version","","util.inherits(module.exports, events.EventEmitter)","","ApiServer.prototype.addModule = function (apiVersion, moduleName, module) {"," if (this.activeApiModules[apiVersion] === undefined) {"," this.activeApiModules[apiVersion] = Object.create(null)"," }"," this.activeApiModules[apiVersion][moduleName] = module"," this.router.update(this.activeApiModules, this.middlewareList)"," return this","}","","ApiServer.prototype.use = function () {"," var args = Array.prototype.slice.call(arguments)"," var middleware = args.pop()"," var route = args.pop() || /./"," this.middlewareList.push({"," route: route,"," handle: middleware"," })"," this.router.update(this.activeApiModules, this.middlewareList)"," return this","}","","ApiServer.prototype.listen = function () {"," var arguments = Array.prototype.slice.call(arguments)"," var port = this.port, hostname, callback"," arguments.forEach(function (arg) {"," if (typeof arg === 'function') {"," callback = arg"," return"," }"," if (typeof arg === 'string' && isNaN(Number(arg))) {"," hostname = arg"," return"," }"," if (!isNaN(Number(arg))) {"," port = arg"," return"," }"," })"," this.server.listen(port, hostname, callback)","}","","ApiServer.prototype.close = function (callback) {"," callback && this.server.once('close', callback)"," this.server.close()","}","","// export middleware","Object.keys(middleware).forEach(function (middlewareName) {"," module.exports[middlewareName] = middleware[middlewareName]","})","","// private","function onRequest(request, response) {"," var self = this"," var end = response.end",""," request.requestedAt = new Date().getTime()"," request.parsedUrl = url.parse(request.url, true)"," request.pathname = request.parsedUrl.pathname.replace(/\\/\\/+/g, '/')"," request.querystring = qs.parse(request.parsedUrl.search.replace(/^\\?/, ''))"," request.makeBuffered()"," request.pause()"," request.timeout = setInterval(function () {"," response.writeHead(408)"," end.call(response)"," clearInterval(request.timeout)"," self.emit('timeout', request.url)"," }, this.timeout)",""," response.end = function () {"," clearInterval(request.timeout)"," end.apply(this, arguments)"," self.emit('requestEnd', request.url, new Date().getTime() - request.requestedAt)"," }",""," this.emit('requestStart', request.url, request.requestedAt)"," this.JSONTransport(request, response)",""," var executionChain = this.router.get(request)",""," if (!executionChain) {"," return response.serveJSON({"," success: false,"," reason: request.pathname + ' api not found'"," }, {"," httpStatusCode: 404,"," })"," }",""," new Chain(executionChain, function (err) {"," if (err) {"," response.serveJSON({"," success: false,"," reason: 'something went wrong: ' + err,"," stack: err.stack"," }, {"," httpStatusCode: 500"," })"," self.emit('error', request.url, err)"," }"," }).call(request, response)","}"];
5 changes: 4 additions & 1 deletion lib/apiserver.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ ApiServer.prototype.addModule = function (apiVersion, moduleName, module) {
return this
}

ApiServer.prototype.use = function (route, middleware) {
ApiServer.prototype.use = function () {
var args = Array.prototype.slice.call(arguments)
var middleware = args.pop()
var route = args.pop() || /./
this.middlewareList.push({
route: route,
handle: middleware
Expand Down
10 changes: 9 additions & 1 deletion test/apiserver-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,15 @@ describe('ApiServer', function () {
handle: middleware
})
})
it('should call the routerMapper', function (done) {
it('should correctly store middleware / default params', function () {
var middleware = function () {}
apiserver = new ApiServer()
apiserver.use(middleware)
apiserver.middlewareList.should.have.length(1)
apiserver.middlewareList[0].route.toString().should.equal('/./')
apiserver.middlewareList[0].handle.should.equal(middleware)
})
it('should trigger router.update', function (done) {
apiserver = new ApiServer({ router: { update: done.bind(null, null) } })
apiserver.use(/./, { hadle: function () {} })
})
Expand Down

0 comments on commit 54708f9

Please sign in to comment.