diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-06-06 17:27:47 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-06-06 17:27:47 +0200 |
commit | 30fbd22efe117f459873599311f16a2e7394aa52 (patch) | |
tree | d7b32b3ad7ade7b155c488f8b33afb2532b29696 /lib | |
parent | 29df73ba72cedc6ff66843dad59ffded9d4aa01b (diff) | |
download | gitbook-30fbd22efe117f459873599311f16a2e7394aa52.zip gitbook-30fbd22efe117f459873599311f16a2e7394aa52.tar.gz gitbook-30fbd22efe117f459873599311f16a2e7394aa52.tar.bz2 |
Add modifier togglePlugin
Diffstat (limited to 'lib')
-rw-r--r-- | lib/models/pluginDependency.js | 85 | ||||
-rw-r--r-- | lib/modifiers/config/__tests__/togglePlugin.js | 32 | ||||
-rw-r--r-- | lib/modifiers/config/addPlugin.js | 14 | ||||
-rw-r--r-- | lib/modifiers/config/index.js | 5 | ||||
-rw-r--r-- | lib/modifiers/config/removePlugin.js | 11 | ||||
-rw-r--r-- | lib/modifiers/config/togglePlugin.js | 25 |
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; |