summaryrefslogtreecommitdiffstats
path: root/lib/parse
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2016-06-07 12:31:21 +0200
committerSamy Pessé <samypesse@gmail.com>2016-06-07 12:31:21 +0200
commitca70c934d6a92f12e0f826cd3f6f32d562f66b2f (patch)
treed28e83efdca7983d128a59b603aee47314243c1b /lib/parse
parent1cc48fa314782312883af00cf64a56929b62f057 (diff)
downloadgitbook-ca70c934d6a92f12e0f826cd3f6f32d562f66b2f.zip
gitbook-ca70c934d6a92f12e0f826cd3f6f32d562f66b2f.tar.gz
gitbook-ca70c934d6a92f12e0f826cd3f6f32d562f66b2f.tar.bz2
Split page parsing into parsePageFromString and parsePage
Add tests for parsePageFromString
Diffstat (limited to 'lib/parse')
-rw-r--r--lib/parse/__tests__/parsePageFromString.js37
-rw-r--r--lib/parse/index.js23
-rw-r--r--lib/parse/parsePage.js24
-rw-r--r--lib/parse/parsePageFromString.js22
4 files changed, 79 insertions, 27 deletions
diff --git a/lib/parse/__tests__/parsePageFromString.js b/lib/parse/__tests__/parsePageFromString.js
new file mode 100644
index 0000000..2911fa3
--- /dev/null
+++ b/lib/parse/__tests__/parsePageFromString.js
@@ -0,0 +1,37 @@
+var parsePageFromString = require('../parsePageFromString');
+var Page = require('../../models/page');
+
+describe('parsePageFromString', function() {
+ var page = new Page();
+
+ it('should parse YAML frontmatter', function() {
+ var CONTENT = '---\nhello: true\nworld: "cool"\n---\n# Hello World\n';
+ var newPage = parsePageFromString(page, CONTENT);
+
+ expect(newPage.getDir()).toBe('ltr');
+ expect(newPage.getContent()).toBe('# Hello World\n');
+
+ var attrs = newPage.getAttributes();
+ expect(attrs.size).toBe(2);
+ expect(attrs.get('hello')).toBe(true);
+ expect(attrs.get('world')).toBe('cool');
+ });
+
+ it('should parse text direction (english)', function() {
+ var CONTENT = 'Hello World';
+ var newPage = parsePageFromString(page, CONTENT);
+
+ expect(newPage.getDir()).toBe('ltr');
+ expect(newPage.getContent()).toBe('Hello World');
+ expect(newPage.getAttributes().size).toBe(0);
+ });
+
+ it('should parse text direction (arab)', function() {
+ var CONTENT = 'مرحبا بالعالم';
+ var newPage = parsePageFromString(page, CONTENT);
+
+ expect(newPage.getDir()).toBe('rtl');
+ expect(newPage.getContent()).toBe('مرحبا بالعالم');
+ expect(newPage.getAttributes().size).toBe(0);
+ });
+});
diff --git a/lib/parse/index.js b/lib/parse/index.js
index fcc5025..1f73946 100644
--- a/lib/parse/index.js
+++ b/lib/parse/index.js
@@ -1,14 +1,15 @@
module.exports = {
- parseBook: require('./parseBook'),
- parseSummary: require('./parseSummary'),
- parseGlossary: require('./parseGlossary'),
- parseReadme: require('./parseReadme'),
- parseConfig: require('./parseConfig'),
- parsePagesList: require('./parsePagesList'),
- parseIgnore: require('./parseIgnore'),
- listAssets: require('./listAssets'),
- parseLanguages: require('./parseLanguages'),
- parsePage: require('./parsePage'),
- lookupStructureFile: require('./lookupStructureFile')
+ parseBook: require('./parseBook'),
+ parseSummary: require('./parseSummary'),
+ parseGlossary: require('./parseGlossary'),
+ parseReadme: require('./parseReadme'),
+ parseConfig: require('./parseConfig'),
+ parsePagesList: require('./parsePagesList'),
+ parseIgnore: require('./parseIgnore'),
+ listAssets: require('./listAssets'),
+ parseLanguages: require('./parseLanguages'),
+ parsePage: require('./parsePage'),
+ parsePageFromString: require('./parsePageFromString'),
+ lookupStructureFile: require('./lookupStructureFile')
};
diff --git a/lib/parse/parsePage.js b/lib/parse/parsePage.js
index 1d515d6..fdc56a3 100644
--- a/lib/parse/parsePage.js
+++ b/lib/parse/parsePage.js
@@ -1,27 +1,19 @@
-var Immutable = require('immutable');
-var fm = require('front-matter');
-var direction = require('direction');
+var parsePageFromString = require('./parsePageFromString');
/**
- Parse a page, read its content and parse the YAMl header
-
- @param {Book} book
- @param {Page} page
- @return {Promise<Page>}
-*/
+ * Parse a page, read its content and parse the YAMl header
+ *
+ * @param {Book} book
+ * @param {Page} page
+ * @return {Promise<Page>}
+ */
function parsePage(book, page) {
var fs = book.getContentFS();
var file = page.getFile();
return fs.readAsString(file.getPath())
.then(function(content) {
- var parsed = fm(content);
-
- return page.merge({
- content: parsed.body,
- attributes: Immutable.fromJS(parsed.attributes),
- dir: direction(parsed.body)
- });
+ return parsePageFromString(page, content);
});
}
diff --git a/lib/parse/parsePageFromString.js b/lib/parse/parsePageFromString.js
new file mode 100644
index 0000000..80c147b
--- /dev/null
+++ b/lib/parse/parsePageFromString.js
@@ -0,0 +1,22 @@
+var Immutable = require('immutable');
+var fm = require('front-matter');
+var direction = require('direction');
+
+/**
+ * Parse a page, its content and the YAMl header
+ *
+ * @param {Page} page
+ * @return {Page}
+ */
+function parsePageFromString(page, content) {
+ var parsed = fm(content);
+
+ return page.merge({
+ content: parsed.body,
+ attributes: Immutable.fromJS(parsed.attributes),
+ dir: direction(parsed.body)
+ });
+}
+
+
+module.exports = parsePageFromString;