diff options
-rw-r--r-- | lib/models/book.js | 2 | ||||
-rw-r--r-- | lib/models/fs.js | 3 | ||||
-rw-r--r-- | lib/models/languages.js | 26 | ||||
-rw-r--r-- | lib/parse/__tests__/parseBook.js | 16 | ||||
-rw-r--r-- | lib/parse/parseBook.js | 2 | ||||
-rw-r--r-- | lib/plugins/findForBook.js | 1 |
6 files changed, 44 insertions, 6 deletions
diff --git a/lib/models/book.js b/lib/models/book.js index 030223f..8f8ab74 100644 --- a/lib/models/book.js +++ b/lib/models/book.js @@ -248,7 +248,7 @@ Book.createFromParent = function createFromParent(parent, language) { logger: parent.getLogger(), ignore: Ignore().add(ignore), language: language, - fs: FS.reduceScope(parent.getFS(), language) + fs: FS.reduceScope(parent.getContentFS(), language) }); }; diff --git a/lib/models/fs.js b/lib/models/fs.js index f124da8..ab65dd5 100644 --- a/lib/models/fs.js +++ b/lib/models/fs.js @@ -33,7 +33,8 @@ FS.prototype.getRoot = function() { */ FS.prototype.isInScope = function(filename) { var rootPath = this.getRoot(); - filename = path.resolve(rootPath, filename); + filename = path.join(rootPath, filename); + return PathUtil.isInRoot(rootPath, filename); }; diff --git a/lib/models/languages.js b/lib/models/languages.js index c64857f..6c19cba 100644 --- a/lib/models/languages.js +++ b/lib/models/languages.js @@ -1,6 +1,7 @@ var Immutable = require('immutable'); var File = require('./file'); +var Language = require('./language'); var Languages = Immutable.Record({ file: File(), @@ -34,4 +35,29 @@ Languages.prototype.getLanguage = function(lang) { return this.getList().get(lang); }; + +/** + Create a languages list from a JS object + + @param {File} + @param {Array} + @return {Language} +*/ +Languages.createFromList = function(file, langs) { + var list = Immutable.OrderedMap(); + + langs.forEach(function(lang) { + lang = Language({ + title: lang.title, + path: lang.path + }); + list = list.set(lang.getID(), lang); + }); + + return Languages({ + file: file, + list: list + }); +} + module.exports = Languages; diff --git a/lib/parse/__tests__/parseBook.js b/lib/parse/__tests__/parseBook.js index 441b7c0..735ba57 100644 --- a/lib/parse/__tests__/parseBook.js +++ b/lib/parse/__tests__/parseBook.js @@ -4,16 +4,26 @@ var createMockFS = require('../../fs/mock'); describe('parseBook', function() { var parseBook = require('../parseBook'); - pit('should parse glossary if exists', function() { + pit('should parse multilingual book', function() { var fs = createMockFS({ - 'README.md': 'Hello World', - 'GLOSSARY.md': '# Glossary\n\n## Hello\nDescription for hello' + 'LANGS.md': '# Languages\n\n* [en](en)\n* [fr](fr)', + 'en': { + 'README.md': 'Hello' + }, + 'fr': { + 'README.md': 'Bonjour' + } }); var book = Book.createForFS(fs); return parseBook(book) .then(function(resultBook) { + var languages = resultBook.getLanguages(); + var books = resultBook.getBooks(); + expect(resultBook.isMultilingual()).toBe(true); + expect(languages.getList().size).toBe(2); + expect(books.size).toBe(2); }); }); }); diff --git a/lib/parse/parseBook.js b/lib/parse/parseBook.js index 7dfa1eb..69cd66e 100644 --- a/lib/parse/parseBook.js +++ b/lib/parse/parseBook.js @@ -62,7 +62,7 @@ function parseBook(book) { .then(parseConfig) .then(parseLanguages) .then(function(resultBook) { - if (book.isMultilingual()) { + if (resultBook.isMultilingual()) { return parseMultilingualBook(resultBook); } else { return parseBookContent(resultBook); diff --git a/lib/plugins/findForBook.js b/lib/plugins/findForBook.js index 75a4988..af0c1ee 100644 --- a/lib/plugins/findForBook.js +++ b/lib/plugins/findForBook.js @@ -14,6 +14,7 @@ function findForBook(book) { return Promise.all([ findInstalled(path.resolve(__dirname, '../..')), findInstalled(book.getRoot()) + // todo: list for parent of multilingual ]) .then(function(results) { return Immutable.List(results) |