From 75e3e13076705c4a1abe0c425058b95cd182be9b Mon Sep 17 00:00:00 2001 From: Scott Gress Date: Mon, 29 Feb 2016 17:37:18 -0500 Subject: [PATCH] Allow hooks to be turned off by setting their environment var to the string "false" closes #3618 --- lib/app/private/loadHooks.js | 2 +- lib/hooks/moduleloader/index.js | 2 +- test/integration/hook.3rdparty.test.js | 49 ++++++++++++++++++++++++++ test/unit/app.initializeHooks.test.js | 23 ++++++++++++ 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/lib/app/private/loadHooks.js b/lib/app/private/loadHooks.js index 6013a7f67..d73cdcfb6 100644 --- a/lib/app/private/loadHooks.js +++ b/lib/app/private/loadHooks.js @@ -19,7 +19,7 @@ module.exports = function(sails) { var hookPrototype = hooks[id]; // Allow disabling of hooks by setting them to "false" - if (hookPrototype === false || hooks[id.split('.')[0]] === false) { + if (hookPrototype === false || hookPrototype === 'false' || hooks[id.split('.')[0]] === false) { delete hooks[id]; return; } diff --git a/lib/hooks/moduleloader/index.js b/lib/hooks/moduleloader/index.js index aac59be09..289027826 100644 --- a/lib/hooks/moduleloader/index.js +++ b/lib/hooks/moduleloader/index.js @@ -471,7 +471,7 @@ module.exports = function(sails) { hookName = identity.replace(/^(@.+?\/)?(sails-hook-)?/, ''); } - if (sails.config.hooks[hookName] === false) { + if (sails.config.hooks[hookName] === false || sails.config.hooks[hookName] === 'false') { return memo; } diff --git a/test/integration/hook.3rdparty.test.js b/test/integration/hook.3rdparty.test.js index 5304bbc14..b0352a77e 100644 --- a/test/integration/hook.3rdparty.test.js +++ b/test/integration/hook.3rdparty.test.js @@ -76,6 +76,55 @@ describe('hooks :: ', function() { }); + describe('with hooks.shout set to boolean false', function() { + + var sails; + + before(function(done) { + appHelper.liftQuiet({hooks: {shout: false}}, function(err, _sails) { + if (err) {return done(err);} + sails = _sails; + return done(); + }); + }); + + after(function(done) { + sails.lower(function(){setTimeout(done, 100);}); + }); + + it('should not install a hook into `sails.hooks.shout`', function() { + + assert(_.isUndefined(sails.hooks.shout)); + + }); + + }); + + + describe('with hooks.shout set to the string "false"', function() { + + var sails; + + before(function(done) { + appHelper.liftQuiet({hooks: {shout: "false"}}, function(err, _sails) { + if (err) {return done(err);} + sails = _sails; + return done(); + }); + }); + + after(function(done) { + sails.lower(function(){setTimeout(done, 100);}); + }); + + it('should not install a hook into `sails.hooks.shout`', function() { + + assert(_.isUndefined(sails.hooks.shout)); + + }); + + }); + describe('with hook-level config options', function() { var sails; diff --git a/test/unit/app.initializeHooks.test.js b/test/unit/app.initializeHooks.test.js index 52bf0494b..30276178d 100644 --- a/test/unit/app.initializeHooks.test.js +++ b/test/unit/app.initializeHooks.test.js @@ -44,6 +44,29 @@ describe('app.initializeHooks()', function() { }); }); + describe('with the grunt hook set to boolen false', function() { + var sails = $Sails.load({hooks: {grunt: false}}); + it('should expose hooks on the `sails` global', function() { + sails.hooks.should.be.an.Object; + }); + it('should expose all the core hooks except for Grunt', function() { + var intersection = _.intersection(_.keys(sails.hooks), _.keys(constants.EXPECTED_DEFAULT_HOOKS)); + assert.deepEqual(intersection, _.without(_.keys(constants.EXPECTED_DEFAULT_HOOKS), 'grunt'), 'Missing expected default hooks'); + }); + }); + + describe('with the grunt hook set to the string "false"', function() { + var sails = $Sails.load({hooks: {grunt: "false"}}); + it('should expose hooks on the `sails` global', function() { + sails.hooks.should.be.an.Object; + }); + it('should expose all the core hooks except for Grunt', function() { + var intersection = _.intersection(_.keys(sails.hooks), _.keys(constants.EXPECTED_DEFAULT_HOOKS)); + assert.deepEqual(intersection, _.without(_.keys(constants.EXPECTED_DEFAULT_HOOKS), 'grunt'), 'Missing expected default hooks'); + }); + }); + + describe('configured with a custom hook called `noop`', function() {