diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-05-27 11:10:39 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-05-27 11:10:39 +0200 |
commit | ccb87d5a13ecf6499d701e1e8ca1f9ed52e21d9d (patch) | |
tree | f1330211ce466d01ac1947375e6bd04272e279b3 /lib/plugins/installPlugin.js | |
parent | e2e0ca3f0585ab245bae91c7a48178454fe96a44 (diff) | |
download | gitbook-ccb87d5a13ecf6499d701e1e8ca1f9ed52e21d9d.zip gitbook-ccb87d5a13ecf6499d701e1e8ca1f9ed52e21d9d.tar.gz gitbook-ccb87d5a13ecf6499d701e1e8ca1f9ed52e21d9d.tar.bz2 |
Add unit tests for installPlugin
Diffstat (limited to 'lib/plugins/installPlugin.js')
-rw-r--r-- | lib/plugins/installPlugin.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/plugins/installPlugin.js b/lib/plugins/installPlugin.js new file mode 100644 index 0000000..37852df --- /dev/null +++ b/lib/plugins/installPlugin.js @@ -0,0 +1,47 @@ +var npmi = require('npmi'); + +var Promise = require('../utils/promise'); +var resolveVersion = require('./resolveVersion'); + +/** + Install a plugin for a book + + @param {Book} + @param {PluginDependency} + @return {Promise} +*/ +function installPlugin(book, plugin) { + var logger = book.getLogger(); + + var installFolder = book.getRoot(); + var name = plugin.getName(); + var requirement = plugin.getVersion(); + + logger.info.ln(''); + logger.info.ln('installing plugin "' + name + '"'); + + // Find a version to install + return resolveVersion(plugin) + .then(function(version) { + if (!version) { + throw new Error('Found no satisfactory version for plugin "' + name + '" with requirement "' + requirement + '"'); + } + + logger.info.ln('install plugin "' + name +'" (' + requirement + ') from NPM with version', version); + return Promise.nfcall(npmi, { + 'name': plugin.getNpmID(), + 'version': version, + 'path': installFolder, + 'npmLoad': { + 'loglevel': 'silent', + 'loaded': true, + 'prefix': installFolder + } + }); + }) + .then(function() { + logger.info.ok('plugin "' + name + '" installed with success'); + }); +} + +module.exports = installPlugin; |