summaryrefslogtreecommitdiffstats
path: root/lib/modifiers
diff options
context:
space:
mode:
Diffstat (limited to 'lib/modifiers')
-rw-r--r--lib/modifiers/config/__tests__/removePlugin.js33
-rw-r--r--lib/modifiers/config/hasPlugin.js15
-rw-r--r--lib/modifiers/config/index.js10
-rw-r--r--lib/modifiers/config/isDefaultPlugin.js5
-rw-r--r--lib/modifiers/config/removePlugin.js2
-rw-r--r--lib/modifiers/config/togglePlugin.js14
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);
}