From bf20f4f6d97b8d2643f19ed7ac617c33a7f2ea6b Mon Sep 17 00:00:00 2001 From: Alan Pearce Date: Sun, 18 Jun 2017 12:35:49 +0200 Subject: refactor: metadata -> posts --- src/index.js | 6 +++--- src/modules/metadata.js | 41 ----------------------------------------- src/modules/posts.js | 38 ++++++++++++++++++++++++++++++++++++++ test/modules/metadata.test.js | 33 --------------------------------- test/modules/posts.test.js | 31 +++++++++++++++++++++++++++++++ 5 files changed, 72 insertions(+), 77 deletions(-) delete mode 100644 src/modules/metadata.js create mode 100644 src/modules/posts.js delete mode 100644 test/modules/metadata.test.js create mode 100644 test/modules/posts.test.js diff --git a/src/index.js b/src/index.js index c16d952..3d25faa 100644 --- a/src/index.js +++ b/src/index.js @@ -10,14 +10,14 @@ const router = new Router() const view = require('koa-nunjucks-next') -const metadata = require('./modules/metadata.js') -const postMetadata = metadata.getFolderMetadata(process.env.POST_DIR) +const Posts = require('./modules/posts.js') +const posts = Posts.getFolder(process.env.POST_DIR) app.use(view(`${__dirname}/views`)) router.get('/', async function (ctx, next) { await ctx.render('index', { - posts: postMetadata + posts }) }) diff --git a/src/modules/metadata.js b/src/modules/metadata.js deleted file mode 100644 index f35031d..0000000 --- a/src/modules/metadata.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict' - -const fs = require('fs') -const path = require('path') -const matter = require('gray-matter') - -const options = { - lang: 'toml', - delims: '+++' -} - -function* lowercaseKeys (iterator) { - for (let [k, v] of iterator) { - yield [String(k).toLowerCase(), v] - } -} - -function canonicaliseMetadata (meta) { - if (meta.data) { - meta.data = new Map(lowercaseKeys(Object.entries(meta.data))) - } else { - meta.data = new Map() - } - return meta -} - -function getFileMetadata (filename) { - return canonicaliseMetadata(matter.read(filename, options)) -} - -function getFolderMetadata (folder) { - return fs - .readdirSync(folder) - .map(f => path.resolve(folder, f)) - .map(getFileMetadata) -} - -module.exports = { - getFileMetadata, - getFolderMetadata -} diff --git a/src/modules/posts.js b/src/modules/posts.js new file mode 100644 index 0000000..e005103 --- /dev/null +++ b/src/modules/posts.js @@ -0,0 +1,38 @@ +'use strict' + +const fs = require('fs') +const path = require('path') +const matter = require('gray-matter') + +const options = { + lang: 'toml', + delims: '+++' +} + +function* lowercaseKeys (iterator) { + for (let [k, v] of iterator) { + yield [String(k).toLowerCase(), v] + } +} + +function canonicaliseMetadata (meta) { + if (meta.data) { + meta.data = new Map(lowercaseKeys(Object.entries(meta.data))) + } else { + meta.data = new Map() + } + return meta +} + +function get (filename) { + return canonicaliseMetadata(matter.read(filename, options)) +} + +function getFolder (folder) { + return fs.readdirSync(folder).map(f => path.resolve(folder, f)).map(get) +} + +module.exports = { + get, + getFolder +} diff --git a/test/modules/metadata.test.js b/test/modules/metadata.test.js deleted file mode 100644 index f154eac..0000000 --- a/test/modules/metadata.test.js +++ /dev/null @@ -1,33 +0,0 @@ -const test = require('ava') -const path = require('path') - -const metadata = require('../../src/modules/metadata.js') - -test('getFileMetadata', t => { - const expected = new Map( - Object.entries({ - title: 'This is a test', - description: 'Test file', - tags: ['a', 'b'] - }) - ) - const meta = metadata.getFileMetadata( - path.resolve(__dirname, '../data/testfile.md') - ) - t.deepEqual(meta.data, expected) -}) - -test('getFolderMetadata', t => { - const expected = new Map( - Object.entries({ - title: 'This is a test', - description: 'Test file', - tags: ['a', 'b'] - }) - ) - const actual = metadata.getFolderMetadata(path.resolve(__dirname, '../data/')) - t.true(Array.isArray(actual), 'must return an array') - t.true(actual.length > 0, 'must return a non-empty array') - t.is(actual[0].path, path.resolve(__dirname, '../data/testfile.md')) - t.deepEqual(actual[0].data, expected) -}) diff --git a/test/modules/posts.test.js b/test/modules/posts.test.js new file mode 100644 index 0000000..28a25f2 --- /dev/null +++ b/test/modules/posts.test.js @@ -0,0 +1,31 @@ +const test = require('ava') +const path = require('path') + +const posts = require('../../src/modules/posts.js') + +test('get', t => { + const expected = new Map( + Object.entries({ + title: 'This is a test', + description: 'Test file', + tags: ['a', 'b'] + }) + ) + const meta = posts.get(path.resolve(__dirname, '../data/testfile.md')) + t.deepEqual(meta.data, expected) +}) + +test('getFolder', t => { + const expected = new Map( + Object.entries({ + title: 'This is a test', + description: 'Test file', + tags: ['a', 'b'] + }) + ) + const actual = posts.getFolder(path.resolve(__dirname, '../data/')) + t.true(Array.isArray(actual), 'must return an array') + t.true(actual.length > 0, 'must return a non-empty array') + t.is(actual[0].path, path.resolve(__dirname, '../data/testfile.md')) + t.deepEqual(actual[0].data, expected) +}) -- cgit 1.4.1