diff options
author | Aaron O'Mullan <aaron.omullan@friendco.de> | 2014-04-12 12:27:13 -0700 |
---|---|---|
committer | Aaron O'Mullan <aaron.omullan@friendco.de> | 2014-04-12 12:27:13 -0700 |
commit | 555c0d63ee905f9a258cccf164b58b1e1e1bd950 (patch) | |
tree | 57e3b7e40c66ac973a7d50207ec0515fbb29f88b /lib/generate/init.js | |
parent | fb05609e09c4d3bab0d86dedc8306ecc9358793e (diff) | |
download | gitbook-555c0d63ee905f9a258cccf164b58b1e1e1bd950.zip gitbook-555c0d63ee905f9a258cccf164b58b1e1e1bd950.tar.gz gitbook-555c0d63ee905f9a258cccf164b58b1e1e1bd950.tar.bz2 |
Add gitbook init command, fixes #67
Diffstat (limited to 'lib/generate/init.js')
-rw-r--r-- | lib/generate/init.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/lib/generate/init.js b/lib/generate/init.js new file mode 100644 index 0000000..705e6e7 --- /dev/null +++ b/lib/generate/init.js @@ -0,0 +1,69 @@ +var Q = require('q'); +var _ = require('lodash'); + +var path = require('path'); + +var fs = require('./fs'); +var parse = require('../parse'); + + +// Extract paths out of a summary +function paths(summary) { + return _.reduce(summary.chapters, function(accu, chapter) { + return accu.concat( + _.filter([chapter.path].concat(_.pluck(chapter.articles, 'path'))) + ); + }, []); +} + +// Get the parent folders out of a group of files +function folders(files) { + return _.chain(files) + .map(function(file) { + return path.dirname(file); + }) + .uniq() + .value(); +} + +function initDir(dir) { + return fs.readFile(path.join(dir, 'SUMMARY.md'), 'utf8') + .then(function(src) { + // Parse summary + return parse.summary(src); + }) + .then(function(summary) { + // Extract paths from summary + return paths(summary); + }) + .then(function(paths) { + // Convert to absolute paths + return _.map(paths, function(file) { + return path.resolve(file); + }); + }) + .then(function(files) { + // Create folders + return Q.all(_.map(folders(files), function(folder) { + return fs.mkdirp(folder); + })) + .then(_.constant(files)); + }) + .then(function(files) { + // Create files that don't exist + return Q.all(_.map(files, function(file) { + return fs.exists(file) + .then(function(exists) { + if(exists) return; + return fs.writeFile(file, ''); + }); + })); + }) + .fail(function(err) { + console.error(err.stack); + }); +} + + +// Exports +module.exports = initDir; |