diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/modifiers/config/__tests__/removePlugin.js | 33 | ||||
-rw-r--r-- | lib/modifiers/config/hasPlugin.js | 15 | ||||
-rw-r--r-- | lib/modifiers/config/index.js | 10 | ||||
-rw-r--r-- | lib/modifiers/config/isDefaultPlugin.js | 5 | ||||
-rw-r--r-- | lib/modifiers/config/removePlugin.js | 2 | ||||
-rw-r--r-- | lib/modifiers/config/togglePlugin.js | 14 |
6 files changed, 68 insertions, 11 deletions
diff --git a/lib/modifiers/config/__tests__/removePlugin.js b/lib/modifiers/config/__tests__/removePlugin.js new file mode 100644 index 0000000..253cc39 --- /dev/null +++ b/lib/modifiers/config/__tests__/removePlugin.js @@ -0,0 +1,33 @@ +var removePlugin = require('../removePlugin'); +var Config = require('../../../models/config'); + +describe('removePlugin', function() { + var config = Config.createWithValues({ + plugins: ['hello', 'world', '-disabled'] + }); + + it('should remove the plugin from the list', function() { + var newConfig = removePlugin(config, 'hello'); + + var testDep = newConfig.getPluginDependency('hello'); + expect(testDep).toNotBeDefined(); + }); + + it('should remove the disabled plugin from the list', function() { + var newConfig = removePlugin(config, 'disabled'); + + var testDep = newConfig.getPluginDependency('disabled'); + expect(testDep).toNotBeDefined(); + }); + + it('should disable default plugin', function() { + var newConfig = removePlugin(config, 'search'); + + var disabledDep = newConfig.getPluginDependency('search'); + expect(disabledDep).toBeDefined(); + expect(disabledDep.getVersion()).toEqual('*'); + expect(disabledDep.isEnabled()).toBeFalsy(); + }); +}); + + diff --git a/lib/modifiers/config/hasPlugin.js b/lib/modifiers/config/hasPlugin.js new file mode 100644 index 0000000..9aab4f2 --- /dev/null +++ b/lib/modifiers/config/hasPlugin.js @@ -0,0 +1,15 @@ + +/** + * Test if a plugin is listed + * @param { {List<PluginDependency}} deps + * @param {String} plugin + * @param {String} version + * @return {Boolean} + */ +function hasPlugin(deps, pluginName, version) { + return !!deps.find(function(dep) { + return dep.getName() === pluginName && (!version || dep.getVersion() === version); + }); +} + +module.exports = hasPlugin; diff --git a/lib/modifiers/config/index.js b/lib/modifiers/config/index.js index 37f32a0..5705dbb 100644 --- a/lib/modifiers/config/index.js +++ b/lib/modifiers/config/index.js @@ -1,7 +1,9 @@ module.exports = { - addPlugin: require('./addPlugin'), - removePlugin: require('./removePlugin'), - togglePlugin: require('./togglePlugin'), - editPlugin: require('./editPlugin') + addPlugin: require('./addPlugin'), + removePlugin: require('./removePlugin'), + togglePlugin: require('./togglePlugin'), + editPlugin: require('./editPlugin'), + hasPlugin: require('./hasPlugin'), + isDefaultPlugin: require('./isDefaultPlugin') }; diff --git a/lib/modifiers/config/isDefaultPlugin.js b/lib/modifiers/config/isDefaultPlugin.js index e68874a..63a141d 100644 --- a/lib/modifiers/config/isDefaultPlugin.js +++ b/lib/modifiers/config/isDefaultPlugin.js @@ -1,4 +1,5 @@ var DEFAULT_PLUGINS = require('../../constants/defaultPlugins'); +var hasPlugin = require('./hasPlugin'); /** * Test if a plugin is a default one @@ -7,9 +8,7 @@ var DEFAULT_PLUGINS = require('../../constants/defaultPlugins'); * @return {Boolean} */ function isDefaultPlugin(pluginName, version) { - return !!DEFAULT_PLUGINS.find(function(dep) { - return dep.getName() === pluginName && (!version || dep.getVersion() === version); - }); + return hasPlugin(DEFAULT_PLUGINS, pluginName, version); } module.exports = isDefaultPlugin; diff --git a/lib/modifiers/config/removePlugin.js b/lib/modifiers/config/removePlugin.js index dd7c248..ec06d1e 100644 --- a/lib/modifiers/config/removePlugin.js +++ b/lib/modifiers/config/removePlugin.js @@ -16,7 +16,7 @@ function removePlugin(config, pluginName) { } // Remove the dependency from the list - deps = deps.filter(function(dep) { + deps = deps.filterNot(function(dep) { return dep.getName() === pluginName; }); return config.setPluginDependencies(deps); diff --git a/lib/modifiers/config/togglePlugin.js b/lib/modifiers/config/togglePlugin.js index 0cc4932..a49e3b9 100644 --- a/lib/modifiers/config/togglePlugin.js +++ b/lib/modifiers/config/togglePlugin.js @@ -1,16 +1,24 @@ +var PluginDependency = require('../../models/pluginDependency'); +var hasPlugin = require('./hasPlugin'); +var isDefaultPlugin = require('./isDefaultPlugin'); /** * Enable/disable a plugin dependency * @param {Config} config - * @param {String} plugin + * @param {String} pluginName * @param {Boolean} state (optional) * @return {Config} */ -function togglePlugin(config, plugin, state) { +function togglePlugin(config, pluginName, state) { var deps = config.getPluginDependencies(); + // For default plugin, we should ensure it's listed first + if (isDefaultPlugin(pluginName) && !hasPlugin(deps, pluginName)) { + deps = deps.push(PluginDependency.create(pluginName)); + } + deps = deps.map(function(dep) { - if (dep.getName() === plugin) { + if (dep.getName() === pluginName) { return dep.toggle(state); } |