diff options
Diffstat (limited to 'lib/init.js')
-rw-r--r-- | lib/init.js | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/lib/init.js b/lib/init.js new file mode 100644 index 0000000..ea75a77 --- /dev/null +++ b/lib/init.js @@ -0,0 +1,68 @@ +var _ = require('lodash'); +var path = require('path'); + +var fs = require('./utils/fs'); +var Promise = require('./utils/promise'); + +// Initialize folder structure for a book +// Read SUMMARY to created the right chapter +function initBook(book) { + var extensionToUse = '.md'; + + book.log.info.ln('init book at', book.root); + return fs.mkdirp(book.root) + .then(function() { + return book.config.load(); + }) + .then(function() { + book.log.info.ln('detect structure from SUMMARY (if it exists)'); + return book.summary.load(); + }) + .then(function() { + var summary = book.summary.path || 'SUMMARY.md'; + var articles = book.summary.flatten(); + + // Use extension of summary + extensionToUse = path.extname(summary); + + // Readme doesn't have a path + if (!articles[0].path) { + articles[0].path = 'README' + extensionToUse; + } + + // Summary doesn't exists? create one + if (!book.summary.path) { + articles.push({ + title: 'Summary', + path: 'SUMMARY'+extensionToUse + }); + } + + // Create files that don't exist + return Promise.serie(articles, function(article) { + if (!article.path) return; + + var absolutePath = book.resolve(article.path); + + return fs.exists(absolutePath) + .then(function(exists) { + if(exists) { + book.log.info.ln('found', article.path); + return; + } else { + book.log.info.ln('create', article.path); + } + + return fs.mkdirp(path.dirname(absolutePath)) + .then(function() { + return fs.writeFile(absolutePath, '# '+article.title+'\n\n'); + }); + }); + }); + }) + .then(function() { + book.log.info.ln('initialization is finished'); + }); +} + +module.exports = initBook; |