summaryrefslogtreecommitdiffstats
path: root/lib
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
parent29df73ba72cedc6ff66843dad59ffded9d4aa01b (diff)
downloadgitbook-30fbd22efe117f459873599311f16a2e7394aa52.zip
gitbook-30fbd22efe117f459873599311f16a2e7394aa52.tar.gz
gitbook-30fbd22efe117f459873599311f16a2e7394aa52.tar.bz2
Add modifier togglePlugin
Diffstat (limited to 'lib')
-rw-r--r--lib/models/pluginDependency.js85
-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
6 files changed, 117 insertions, 55 deletions
diff --git a/lib/models/pluginDependency.js b/lib/models/pluginDependency.js
index f668013..8866294 100644
--- a/lib/models/pluginDependency.js
+++ b/lib/models/pluginDependency.js
@@ -6,9 +6,9 @@ var PREFIX = require('../constants/pluginPrefix');
var DEFAULT_VERSION = '*';
/*
- PluginDependency represents the informations about a plugin
- stored in config.plugins
-*/
+ * PluginDependency represents the informations about a plugin
+ * stored in config.plugins
+ */
var PluginDependency = Immutable.Record({
name: String(),
@@ -32,29 +32,39 @@ PluginDependency.prototype.isEnabled = function() {
};
/**
- Return NPM ID for the dependency
+ * Toggle this plugin state
+ * @param {Boolean}
+ * @return {PluginDependency}
+ */
+PluginDependency.prototype.toggle = function(state) {
+ if (is.undef(state)) {
+ state = !this.isEnabled();
+ }
+
+ return this.set('enabled', state);
+};
- @return {String}
-*/
+/**
+ * Return NPM ID for the dependency
+ * @return {String}
+ */
PluginDependency.prototype.getNpmID = function() {
return PluginDependency.nameToNpmID(this.getName());
};
/**
- Is the plugin using a git dependency
-
- @return {Boolean}
-*/
+ * Is the plugin using a git dependency
+ * @return {Boolean}
+ */
PluginDependency.prototype.isGitDependency = function() {
return !semver.validRange(this.getVersion());
};
/**
- Create a plugin with a name and a plugin
-
- @param {String}
- @return {Plugin|undefined}
-*/
+ * Create a plugin with a name and a plugin
+ * @param {String}
+ * @return {Plugin|undefined}
+ */
PluginDependency.create = function(name, version, enabled) {
if (is.undefined(enabled)) {
enabled = true;
@@ -68,11 +78,10 @@ PluginDependency.create = function(name, version, enabled) {
};
/**
- Create a plugin from a string
-
- @param {String}
- @return {Plugin|undefined}
-*/
+ * Create a plugin from a string
+ * @param {String}
+ * @return {Plugin|undefined}
+ */
PluginDependency.createFromString = function(s) {
var parts = s.split('@');
var name = parts[0];
@@ -92,22 +101,20 @@ PluginDependency.createFromString = function(s) {
};
/**
- Create a PluginDependency from a string
-
- @param {String}
- @return {List<PluginDependency>}
-*/
+ * Create a PluginDependency from a string
+ * @param {String}
+ * @return {List<PluginDependency>}
+ */
PluginDependency.listFromString = function(s) {
var parts = s.split(',');
return PluginDependency.listFromArray(parts);
};
/**
- Create a PluginDependency from an array
-
- @param {Array}
- @return {List<PluginDependency>}
-*/
+ * Create a PluginDependency from an array
+ * @param {Array}
+ * @return {List<PluginDependency>}
+ */
PluginDependency.listFromArray = function(arr) {
return Immutable.List(arr)
.map(function(entry) {
@@ -126,11 +133,10 @@ PluginDependency.listFromArray = function(arr) {
};
/**
- Export plugin dependencies as an array
-
- @param {List<PluginDependency>} list
- @return {Array<String>}
-*/
+ * Export plugin dependencies as an array
+ * @param {List<PluginDependency>} list
+ * @return {Array<String>}
+ */
PluginDependency.listToArray = function(list) {
return list
.map(function(dep) {
@@ -151,11 +157,10 @@ PluginDependency.listToArray = function(list) {
};
/**
- Return NPM id for a plugin name
-
- @param {String}
- @return {String}
-*/
+ * Return NPM id for a plugin name
+ * @param {String}
+ * @return {String}
+ */
PluginDependency.nameToNpmID = function(s) {
return PREFIX + s;
};
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;