summaryrefslogtreecommitdiffstats
path: root/lib/modifiers
diff options
context:
space:
mode:
authorSamy Pesse <samypesse@gmail.com>2016-06-06 17:27:47 +0200
committerSamy Pesse <samypesse@gmail.com>2016-06-06 17:27:47 +0200
commit30fbd22efe117f459873599311f16a2e7394aa52 (patch)
treed7b32b3ad7ade7b155c488f8b33afb2532b29696 /lib/modifiers
parent29df73ba72cedc6ff66843dad59ffded9d4aa01b (diff)
downloadgitbook-30fbd22efe117f459873599311f16a2e7394aa52.zip
gitbook-30fbd22efe117f459873599311f16a2e7394aa52.tar.gz
gitbook-30fbd22efe117f459873599311f16a2e7394aa52.tar.bz2
Add modifier togglePlugin
Diffstat (limited to 'lib/modifiers')
-rw-r--r--lib/modifiers/config/__tests__/togglePlugin.js32
-rw-r--r--lib/modifiers/config/addPlugin.js14
-rw-r--r--lib/modifiers/config/index.js5
-rw-r--r--lib/modifiers/config/removePlugin.js11
-rw-r--r--lib/modifiers/config/togglePlugin.js25
5 files changed, 72 insertions, 15 deletions
diff --git a/lib/modifiers/config/__tests__/togglePlugin.js b/lib/modifiers/config/__tests__/togglePlugin.js
new file mode 100644
index 0000000..4ac088b
--- /dev/null
+++ b/lib/modifiers/config/__tests__/togglePlugin.js
@@ -0,0 +1,32 @@
+var togglePlugin = require('../togglePlugin');
+var Config = require('../../../models/config');
+var Book = require('../../../models/book');
+
+describe('togglePlugin', function() {
+ var config = Config.createWithValues({
+ plugins: ['hello', 'world', '-disabled']
+ });
+ var book = Book().setConfig(config);
+
+ it('should enable plugin', function() {
+ var newBook = togglePlugin(book, 'disabled');
+ var newConfig = newBook.getConfig();
+
+ var testDep = newConfig.getPluginDependency('disabled');
+ expect(testDep).toBeDefined();
+ expect(testDep.getVersion()).toEqual('*');
+ expect(testDep.isEnabled()).toBeTruthy();
+ });
+
+ it('should disable plugin', function() {
+ var newBook = togglePlugin(book, 'world');
+ var newConfig = newBook.getConfig();
+
+ var testDep = newConfig.getPluginDependency('world');
+ expect(testDep).toBeDefined();
+ expect(testDep.getVersion()).toEqual('*');
+ expect(testDep.isEnabled()).toBeFalsy();
+ });
+});
+
+
diff --git a/lib/modifiers/config/addPlugin.js b/lib/modifiers/config/addPlugin.js
index b4fd227..29f118a 100644
--- a/lib/modifiers/config/addPlugin.js
+++ b/lib/modifiers/config/addPlugin.js
@@ -1,12 +1,12 @@
var PluginDependency = require('../../models/pluginDependency');
-/**
- Add a plugin to a book's configuration
- @param {Book} book
- @param {String} plugin
- @param {String} version (optional)
- @return {Book}
-*/
+/**
+ * Add a plugin to a book's configuration
+ * @param {Book} book
+ * @param {String} plugin
+ * @param {String} version (optional)
+ * @return {Book}
+ */
function addPlugin(book, plugin, version) {
var config = book.getConfig();
var deps = config.getPluginDependencies();
diff --git a/lib/modifiers/config/index.js b/lib/modifiers/config/index.js
index e88eb62..a9b760d 100644
--- a/lib/modifiers/config/index.js
+++ b/lib/modifiers/config/index.js
@@ -1,5 +1,6 @@
module.exports = {
- addPlugin: require('./addPlugin'),
- removePlugin: require('./removePlugin')
+ addPlugin: require('./addPlugin'),
+ removePlugin: require('./removePlugin'),
+ togglePlugin: require('./togglePlugin')
};
diff --git a/lib/modifiers/config/removePlugin.js b/lib/modifiers/config/removePlugin.js
index bc6bcc8..ead22ea 100644
--- a/lib/modifiers/config/removePlugin.js
+++ b/lib/modifiers/config/removePlugin.js
@@ -1,11 +1,10 @@
/**
- Remove a plugin from a book's configuration
-
- @param {Book} book
- @param {String} plugin
- @return {Book}
-*/
+ * Remove a plugin from a book's configuration
+ * @param {Book} book
+ * @param {String} plugin
+ * @return {Book}
+ */
function removePlugin(book, pluginName) {
var config = book.getConfig();
var deps = config.getPluginDependencies();
diff --git a/lib/modifiers/config/togglePlugin.js b/lib/modifiers/config/togglePlugin.js
new file mode 100644
index 0000000..13d4406
--- /dev/null
+++ b/lib/modifiers/config/togglePlugin.js
@@ -0,0 +1,25 @@
+
+/**
+ * Enable/disable a plugin dependency
+ * @param {Book} book
+ * @param {String} plugin
+ * @param {Boolean} state (optional)
+ * @return {Book}
+ */
+function togglePlugin(book, plugin, state) {
+ var config = book.getConfig();
+ var deps = config.getPluginDependencies();
+
+ deps = deps.map(function(dep) {
+ if (dep.getName() === plugin) {
+ return dep.toggle(state);
+ }
+
+ return dep;
+ });
+
+ config = config.setPluginDependencies(deps);
+ return book.setConfig(config);
+}
+
+module.exports = togglePlugin;