diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-06-07 12:31:21 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-06-07 12:31:21 +0200 |
commit | ca70c934d6a92f12e0f826cd3f6f32d562f66b2f (patch) | |
tree | d28e83efdca7983d128a59b603aee47314243c1b /lib | |
parent | 1cc48fa314782312883af00cf64a56929b62f057 (diff) | |
download | gitbook-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')
-rw-r--r-- | lib/models/page.js | 12 | ||||
-rw-r--r-- | lib/parse/__tests__/parsePageFromString.js | 37 | ||||
-rw-r--r-- | lib/parse/index.js | 23 | ||||
-rw-r--r-- | lib/parse/parsePage.js | 24 | ||||
-rw-r--r-- | lib/parse/parsePageFromString.js | 22 |
5 files changed, 84 insertions, 34 deletions
diff --git a/lib/models/page.js b/lib/models/page.js index ffb9601..1b0e9f8 100644 --- a/lib/models/page.js +++ b/lib/models/page.js @@ -32,19 +32,17 @@ Page.prototype.getDir = function() { }; /** - Return path of the page - - @return {String} + * Return path of the page + * @return {String} */ Page.prototype.getPath = function() { return this.getFile().getPath(); }; /** - Create a page for a file - - @param {File} file - @return {Page} + * Create a page for a file + * @param {File} file + * @return {Page} */ Page.createForFile = function(file) { return new Page({ 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; |