diff options
author | Samy Pessé <samypesse@gmail.com> | 2014-11-30 13:04:38 +0100 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2014-11-30 13:04:38 +0100 |
commit | ed48f5f3eede0f55ddc5fc4a65b319ce4e3875d5 (patch) | |
tree | 0a52f9e0727b1a0798996ae97d711b9780f7d289 /lib/generate | |
parent | 7b4accb117d1e3dbd7b6853a7455d96b6fd0f352 (diff) | |
download | gitbook-ed48f5f3eede0f55ddc5fc4a65b319ce4e3875d5.zip gitbook-ed48f5f3eede0f55ddc5fc4a65b319ce4e3875d5.tar.gz gitbook-ed48f5f3eede0f55ddc5fc4a65b319ce4e3875d5.tar.bz2 |
Add command "install" to install plugins from book.json
Diffstat (limited to 'lib/generate')
-rw-r--r-- | lib/generate/config.js | 29 | ||||
-rw-r--r-- | lib/generate/index.js | 33 | ||||
-rw-r--r-- | lib/generate/plugin.js | 26 |
3 files changed, 65 insertions, 23 deletions
diff --git a/lib/generate/config.js b/lib/generate/config.js index 7ec0741..d2054df 100644 --- a/lib/generate/config.js +++ b/lib/generate/config.js @@ -1,3 +1,4 @@ +var Q = require('q'); var _ = require('lodash'); var path = require('path'); @@ -96,10 +97,32 @@ var CONFIG = { } }; +// Return complete configuration +var defaultsConfig = function(options) { + return _.merge(options || {}, CONFIG, _.defaults); +}; + +// Read configuration from book.json +var readConfig = function(options) { + options = defaultsConfig(options); + + return Q() + .then(function() { + try { + var _config = require(path.resolve(options.input, options.configFile)); + options = _.merge(options, _.omit(_config, 'input', 'configFile', 'defaultsPlugins', 'generator')); + } + catch(err) { + // No config file: not a big deal + return Q(); + } + }) + .thenResolve(options); +}; + module.exports = { CONFIG: CONFIG, - defaults: function(options) { - return _.merge(options || {}, CONFIG, _.defaults); - } + defaults: defaultsConfig, + read: readConfig } diff --git a/lib/generate/index.js b/lib/generate/index.js index 01c8b62..de1fc0e 100644 --- a/lib/generate/index.js +++ b/lib/generate/index.js @@ -48,28 +48,18 @@ var loadGenerator = function(options) { var generate = function(options) { - // Set defaults to options - options = defaultConfig.defaults(options); - - // Validate options - if (!options.input) { - return Q.reject(new Error("Need option input (book input directory)")); - } - - // Check files to get folder type (book, multilanguage book or neither) - return checkGenerator(options) - // Read config file - .then(function() { - try { - var _config = require(path.resolve(options.input, options.configFile)); + return defaultConfig.read(options) + .then(function(_options) { + options = _options; - options = _.merge(options, _.omit(_config, 'input', 'configFile', 'defaultsPlugins', 'generator')); - } - catch(err) { - // No config file: not a big deal - return Q(); + // Validate options + if (!options.input) { + return Q.reject(new Error("Need option input (book input directory)")); } + + // Check files to get folder type (book, multilanguage book or neither) + return checkGenerator(options); }) // Read readme @@ -99,7 +89,9 @@ var generate = function(options) { }); }; - +/* + * Generate a multilanguage book by generating a book for each folder. + */ var generateMultiLang = function(options) { var langsSummary; options.output = options.output || path.join(options.input, "_book"); @@ -378,4 +370,5 @@ module.exports = { file: generateFile, book: generateBook, Plugin: Plugin, + config: defaultConfig }; diff --git a/lib/generate/plugin.js b/lib/generate/plugin.js index 9d740a5..373af14 100644 --- a/lib/generate/plugin.js +++ b/lib/generate/plugin.js @@ -4,6 +4,7 @@ var semver = require("semver"); var path = require("path"); var url = require("url"); var fs = require("./fs"); +var npmi = require('npmi'); var resolve = require('resolve'); var pkg = require("../../package.json"); @@ -152,6 +153,31 @@ Plugin.prototype.copyAssets = function(out, options) { }; +// Install a list of plugin +Plugin.install = function(options) { + // Normalize list of plugins + var plugins = Plugin.normalizeNames(options.plugins); + + // Remove defaults plugins + plugins = _.without.apply(null, [plugins].concat(Plugin.defaults)); + + return _.reduce(plugins, function(prev, name) { + return prev.then(function() { + var fullname = "gitbook-plugin-"+name; + console.log("Install plugin", name, "from npm ("+fullname+")"); + return Q.nfcall(npmi, { + 'name': fullname, + 'path': options.input, + 'npmLoad': { + 'loglevel': 'silent', + 'loaded': false, + 'prefix': options.input + } + }); + }); + }, Q()); +}; + // Normalize a list of plugin name to use Plugin.normalizeNames = function(names) { // Normalize list to an array |