summaryrefslogtreecommitdiffstats
path: root/lib/init.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-10-05 09:54:40 +0200
committerSamy Pessé <samypesse@gmail.com>2015-10-05 09:54:40 +0200
commit6c2539e886a2893aa7d9bd4c4f84260145de6bd1 (patch)
treec90dce4bb73fd29f4c75cfffd6e65c508b21084d /lib/init.js
parentaba25d8521a8f7129721c7b52621da7abc6222c5 (diff)
downloadgitbook-6c2539e886a2893aa7d9bd4c4f84260145de6bd1.zip
gitbook-6c2539e886a2893aa7d9bd4c4f84260145de6bd1.tar.gz
gitbook-6c2539e886a2893aa7d9bd4c4f84260145de6bd1.tar.bz2
Move Book.init in another file
Diffstat (limited to 'lib/init.js')
-rw-r--r--lib/init.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/lib/init.js b/lib/init.js
new file mode 100644
index 0000000..2fc8016
--- /dev/null
+++ b/lib/init.js
@@ -0,0 +1,83 @@
+var _ = require('lodash');
+var Q = require('q');
+var path = require('path');
+
+var Book = require('./book');
+var fs = require('./utils/fs');
+
+// Initialize folder structure for a book
+// Read SUMMARY to created the right chapter
+function initBook(root, opts) {
+ var book = new Book(root, opts);
+ var extensionToUse = '.md';
+
+ var chaptersPaths = function(chapters) {
+ return _.reduce(chapters || [], function(accu, chapter) {
+ var o = {
+ title: chapter.title
+ };
+ if (chapter.path) o.path = chapter.path;
+
+ return accu.concat(
+ [o].concat(chaptersPaths(chapter.articles))
+ );
+ }, []);
+ };
+
+ book.log.info.ln('init book at', root);
+ return fs.mkdirp(root)
+ .then(function() {
+ book.log.info.ln('detect structure from SUMMARY (if it exists)');
+ return book.parseSummary();
+ })
+ .fail(function() {
+ return Q();
+ })
+ .then(function() {
+ var summary = book.summaryFile || 'SUMMARY.md';
+ var chapters = book.summary.chapters || [];
+ extensionToUse = path.extname(summary);
+
+ if (chapters.length === 0) {
+ chapters = [
+ {
+ title: 'Summary',
+ path: 'SUMMARY'+extensionToUse
+ },
+ {
+ title: 'Introduction',
+ path: 'README'+extensionToUse
+ }
+ ];
+ }
+
+ return Q(chaptersPaths(chapters));
+ })
+ .then(function(chapters) {
+ // Create files that don't exist
+ return Q.all(_.map(chapters, function(chapter) {
+ if (!chapter.path) return Q();
+ var absolutePath = path.resolve(book.root, chapter.path);
+
+ return fs.exists(absolutePath)
+ .then(function(exists) {
+ if(exists) {
+ book.log.info.ln('found', chapter.path);
+ return;
+ } else {
+ book.log.info.ln('create', chapter.path);
+ }
+
+ return fs.mkdirp(path.dirname(absolutePath))
+ .then(function() {
+ return fs.writeFile(absolutePath, '# '+chapter.title+'\n');
+ });
+ });
+ }));
+ })
+ .then(function() {
+ book.log.info.ln('initialization is finished');
+ });
+}
+
+module.exports = initBook;