summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-11-16 10:06:31 +0100
committerSamy Pessé <samypesse@gmail.com>2015-11-16 10:06:31 +0100
commit9b7a90afef5a19c97c45339a3ccc4ebc3db36397 (patch)
tree602e023a3ff5c660b8f4bc9bc942062443c9c011
parent2ae83b32472bb4eab339a971ff06c63f02117c59 (diff)
downloadgitbook-9b7a90afef5a19c97c45339a3ccc4ebc3db36397.zip
gitbook-9b7a90afef5a19c97c45339a3ccc4ebc3db36397.tar.gz
gitbook-9b7a90afef5a19c97c45339a3ccc4ebc3db36397.tar.bz2
Test first extension of structure itself in book.findFile
-rw-r--r--lib/book.js35
-rw-r--r--lib/configuration.js8
-rw-r--r--test/json.js74
3 files changed, 64 insertions, 53 deletions
diff --git a/lib/book.js b/lib/book.js
index 39d4719..cb00ab1 100644
--- a/lib/book.js
+++ b/lib/book.js
@@ -356,10 +356,10 @@ Book.prototype.parsePlugins = function() {
// Parse readme to extract defaults title and description
Book.prototype.parseReadme = function() {
var that = this;
- var structure = that.config.getStructure('readme');
- that.log.debug.ln('start parsing readme:', structure);
+ var filename = that.config.getStructure('readme', true);
+ that.log.debug.ln('start parsing readme:', filename);
- return that.findFile(structure)
+ return that.findFile(filename)
.then(function(readme) {
if (!readme) throw 'No README file';
if (!_.contains(that.files, readme.path)) throw 'README file is ignored';
@@ -390,10 +390,10 @@ Book.prototype.parseReadme = function() {
Book.prototype.parseLangs = function() {
var that = this;
- var structure = that.config.getStructure('langs');
- that.log.debug.ln('start parsing languages index:', structure);
+ var filename = that.config.getStructure('langs', true);
+ that.log.debug.ln('start parsing languages index:', filename);
- return that.findFile(structure)
+ return that.findFile(filename)
.then(function(langs) {
if (!langs) return [];
@@ -421,10 +421,10 @@ Book.prototype.parseLangs = function() {
Book.prototype.parseSummary = function() {
var that = this;
- var structure = that.config.getStructure('summary');
- that.log.debug.ln('start parsing summary:', structure);
+ var filename = that.config.getStructure('summary', true);
+ that.log.debug.ln('start parsing summary:', filename);
- return that.findFile(structure)
+ return that.findFile(filename)
.then(function(summary) {
if (!summary) throw 'No SUMMARY file';
@@ -459,10 +459,10 @@ Book.prototype.parseSummary = function() {
Book.prototype.parseGlossary = function() {
var that = this;
- var structure = that.config.getStructure('glossary');
- that.log.debug.ln('start parsing glossary: ', structure);
+ var filename = that.config.getStructure('glossary', true);
+ that.log.debug.ln('start parsing glossary: ', filename);
- return that.findFile(structure)
+ return that.findFile(filename)
.then(function(glossary) {
if (!glossary) return [];
@@ -600,12 +600,19 @@ Book.prototype.parsePage = function(filename, options) {
Book.prototype.findFile = function(filename) {
var that = this;
- return _.reduce(parsers.extensions, function(prev, ext) {
+ var ext = path.extname(filename);
+ var basename = path.basename(filename, ext);
+
+ // Ordered list of extensions to test
+ var exts = parsers.extensions;
+ if (ext) exts = _.uniq([ext].concat(exts));
+
+ return _.reduce(exts, function(prev, ext) {
return prev.then(function(output) {
// Stop if already find a parser
if (output) return output;
- var filepath = filename+ext;
+ var filepath = basename+ext;
return that.fileExists(filepath)
.then(function(exists) {
diff --git a/lib/configuration.js b/lib/configuration.js
index 86478c8..dd95585 100644
--- a/lib/configuration.js
+++ b/lib/configuration.js
@@ -181,8 +181,12 @@ Configuration.prototype.dump = function() {
};
// Get structure file
-Configuration.prototype.getStructure = function(name) {
- return this.options.structure[name].split('.').slice(0, -1).join('.');
+Configuration.prototype.getStructure = function(name, dontStripExt) {
+ var filename = this.options.structure[name];
+ if (dontStripExt) return filename;
+
+ filename = filename.split('.').slice(0, -1).join('.');
+ return filename;
};
// Return normalized language
diff --git a/test/json.js b/test/json.js
index 311c80a..60baf9a 100644
--- a/test/json.js
+++ b/test/json.js
@@ -1,91 +1,91 @@
-var fs = require("fs");
-var path = require("path");
+var fs = require('fs');
+var path = require('path');
-describe("JSON generator", function () {
- describe("Basic Book", function() {
+describe('JSON generator', function () {
+ describe('Basic Book', function() {
var book;
before(function() {
- return books.generate("basic", "json")
+ return books.generate('basic', 'json')
.then(function(_book) {
book = _book;
});
});
- it("should correctly output a README.json", function() {
- book.should.have.file("README.json");
+ it('should correctly output a README.json', function() {
+ book.should.have.file('README.json');
});
- it("should output a valid json", function() {
- book.should.have.jsonfile("README.json");
+ it('should output a valid json', function() {
+ book.should.have.jsonfile('README.json');
});
- describe("Page Format", function() {
+ describe('Page Format', function() {
var page;
before(function() {
page = JSON.parse(
fs.readFileSync(
- path.join(book.options.output, "README.json"),
- { encoding: "utf-8" }
+ path.join(book.options.output, 'README.json'),
+ { encoding: 'utf-8' }
)
);
});
- it("should contains valid section", function() {
- page.should.have.property("sections").with.lengthOf(1);
- page.sections[0].should.have.property("content").which.is.a.String();
- page.sections[0].should.have.property("type", "normal");
+ it('should contains valid section', function() {
+ page.should.have.property('sections').with.lengthOf(1);
+ page.sections[0].should.have.property('content').which.is.a.String();
+ page.sections[0].should.have.property('type', 'normal');
});
- it("should contains valid progress", function() {
- page.should.have.property("progress");
- page.progress.should.have.property("chapters").with.lengthOf(1);
- page.progress.should.have.property("current");
+ it('should contains valid progress', function() {
+ page.should.have.property('progress');
+ page.progress.should.have.property('chapters').with.lengthOf(1);
+ page.progress.should.have.property('current');
});
- it("should contains no languages", function() {
- page.should.have.property("langs").with.lengthOf(0);
+ it('should contains no languages', function() {
+ page.should.have.property('langs').with.lengthOf(0);
});
});
});
- describe("Multilingual Book", function() {
+ describe('Multilingual Book', function() {
var book;
before(function() {
- return books.generate("languages", "json")
+ return books.generate('languages', 'json')
.then(function(_book) {
book = _book;
});
});
- it("should correctly output READMEs", function() {
- book.should.have.file("README.json");
- book.should.have.file("en/README.json");
- book.should.have.file("fr/README.json");
+ it('should correctly output READMEs', function() {
+ book.should.have.file('README.json');
+ book.should.have.file('en/README.json');
+ book.should.have.file('fr/README.json');
});
- it("should output valid json", function() {
- book.should.have.jsonfile("README.json");
- book.should.have.jsonfile("en/README.json");
- book.should.have.jsonfile("fr/README.json");
+ it('should output valid json', function() {
+ book.should.have.jsonfile('README.json');
+ book.should.have.jsonfile('en/README.json');
+ book.should.have.jsonfile('fr/README.json');
});
- describe("Page Format", function() {
+ describe('Page Format', function() {
var page;
before(function() {
page = JSON.parse(
fs.readFileSync(
- path.join(book.options.output, "README.json"),
- { encoding: "utf-8" }
+ path.join(book.options.output, 'README.json'),
+ { encoding: 'utf-8' }
)
);
});
- it("should contains no languages", function() {
- page.should.have.property("langs").with.lengthOf(2);
+ it('should contains no languages', function() {
+ page.should.have.property('langs').with.lengthOf(2);
});
});
});