From 3ef217fdfdab6c9f7726100f842b777a82dcff84 Mon Sep 17 00:00:00 2001 From: brettlangdon Date: Sat, 31 Aug 2013 13:00:39 -0400 Subject: [PATCH] make sure to call each plugin handler in the context of the plugin instance --- lib/server.js | 14 ++++++++++---- test/server.registerPlugins.js | 18 +++++++++++------- test/server.rootHandler.js | 6 ++++-- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/server.js b/lib/server.js index b350c10..5264d1c 100644 --- a/lib/server.js +++ b/lib/server.js @@ -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]); + } } }; diff --git a/test/server.registerPlugins.js b/test/server.registerPlugins.js index 8e9d6c0..61e3995 100644 --- a/test/server.registerPlugins.js +++ b/test/server.registerPlugins.js @@ -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] + ]); }); }); diff --git a/test/server.rootHandler.js b/test/server.rootHandler.js index 59ba1ee..22ec78c 100644 --- a/test/server.rootHandler.js +++ b/test/server.rootHandler.js @@ -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], ] };