Fix parsing of multilingual books

This commit is contained in:
Samy Pessé
2016-04-29 10:58:25 +02:00
parent 93e701f471
commit 73c190891d
6 changed files with 44 additions and 6 deletions
+1 -1
View File
@@ -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)
});
};
+2 -1
View File
@@ -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);
};
+26
View File
@@ -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;
+13 -3
View File
@@ -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);
});
});
});
+1 -1
View File
@@ -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);
+1
View File
@@ -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)