Browse Source

make sure to call each plugin handler in the context of the plugin instance

master
Brett Langdon 12 years ago
parent
commit
3ef217fdfd
3 changed files with 25 additions and 13 deletions
  1. +10
    -4
      lib/server.js
  2. +11
    -7
      test/server.registerPlugins.js
  3. +4
    -2
      test/server.rootHandler.js

+ 10
- 4
lib/server.js View File

@ -5,7 +5,8 @@ var yaps_plugin = require("./plugin.js");
var handler_chain = function(handlers, request, server, response, not_found){
if(handlers.length){
handlers[0](request, server, function(status, body){
var plugin = server.enabledPlugins[0][1];
handlers[0][0].call(plugin, request, server, function(status, body){
if(status === null || status === undefined){
handler_chain(handlers.slice(1), request, server, response, not_found);
} else{
@ -89,18 +90,23 @@ server.prototype.registerPlugin = function(plugin_constructor){
util._extend(new_plugin.prototype, plugin_constructor.prototype);
var plugin = new new_plugin(this.settings);
this.enabledPlugins.push(plugin);
var position = this.enabledPlugins.length - 1;
for(var method in plugin.routes){
this.routes[method] = this.routes[method] || {};
for(var route in plugin.routes[method]){
this.routes[method][route] = this.routes[method][route] || [];
this.routes[method][route] = this.routes[method][route].concat(plugin.routes[method][route]);
for(var i in plugin.routes[method][route]){
this.routes[method][route].push([plugin.routes[method][route][i], position]);
}
}
}
if(plugin.notFound){
this.notFound.push(plugin.notFound);
this.notFound.push([plugin.notFound, position]);
}
if(plugin.setup && plugin.setup.length){
this.setup = this.setup.concat(plugin.setup);
for(var i in plugin.setup){
this.setup.push([plugin.setup[i], position]);
}
}
};


+ 11
- 7
test/server.registerPlugins.js View File

@ -41,8 +41,8 @@ suite("Server.RegisterPlugin", function(){
assert.ok(server.routes.GET);
assert.ok(server.routes.TEST);
assert.deepEqual(server.routes.GET["/test"], ["handler_1", "handler_2"]);
assert.deepEqual(server.routes.TEST["/test"], ["handler_3", "handler_4"]);
assert.deepEqual(server.routes.GET["/test"], [["handler_1", 0], ["handler_2", 0]]);
assert.deepEqual(server.routes.TEST["/test"], [["handler_3", 0], ["handler_4", 0]]);
});
test("should transfer routes from multiple plugins without overwriting any", function(){
@ -72,7 +72,9 @@ suite("Server.RegisterPlugin", function(){
server.registerPlugin(plugin_2);
assert.ok(server.routes.GET);
assert.deepEqual(server.routes.GET["/test"], ["handler_1", "handler_2", "handler_3", "handler_4"]);
assert.deepEqual(server.routes.GET["/test"], [
["handler_1", 0], ["handler_2", 0], ["handler_3", 1], ["handler_4", 1]
]);
});
test("should append plugins notFound to server", function(){
@ -81,7 +83,7 @@ suite("Server.RegisterPlugin", function(){
};
var server = new yaps.server();
server.registerPlugin(plugin);
assert.deepEqual(server.notFound, ["handler"]);
assert.deepEqual(server.notFound, [["handler", 0]]);
});
test("should append notFound from multiple plugins", function(){
@ -95,7 +97,7 @@ suite("Server.RegisterPlugin", function(){
var server = new yaps.server();
server.registerPlugin(plugin_1);
server.registerPlugin(plugin_2);
assert.deepEqual(server.notFound, ["handler_1", "handler_2"]);
assert.deepEqual(server.notFound, [["handler_1", 0], ["handler_2", 1]]);
});
test("should append plugins setup to server", function(){
@ -104,7 +106,7 @@ suite("Server.RegisterPlugin", function(){
};
var server = new yaps.server();
server.registerPlugin(plugin);
assert.deepEqual(server.setup, ["handler_1", "handler_2"]);
assert.deepEqual(server.setup, [["handler_1", 0], ["handler_2", 0]]);
});
test("should append setup from multiple plugins", function(){
@ -117,6 +119,8 @@ suite("Server.RegisterPlugin", function(){
var server = new yaps.server();
server.registerPlugin(plugin_1);
server.registerPlugin(plugin_2);
assert.deepEqual(server.setup, ["handler_1", "handler_2", "handler_3", "handler_4"]);
assert.deepEqual(server.setup, [
["handler_1", 0], ["handler_2", 0], ["handler_3", 1], ["handler_4", 1]
]);
});
});

+ 4
- 2
test/server.rootHandler.js View File

@ -51,9 +51,10 @@ suite("Server.RootHandler", function(){
});
var server = new yaps.server();
server.enabledPlugins = [{}];
server.routes.GET = {
"/test": [
handler_spy,
[handler_spy, 0],
]
};
@ -113,9 +114,10 @@ suite("Server.RootHandler", function(){
});
var server = new yaps.server();
server.enabledPlugins = [{}];
server.routes.GET = {
"/test": [
handler_spy,
[handler_spy, 0],
]
};


Loading…
Cancel
Save