all repos — archive/homestead @ 1a36d4dc311a86246fe854da888af01f8195368e

My future indieweb platform

refactor: move tag indexing of posts to Posts

Alan Pearce
commit

1a36d4dc311a86246fe854da888af01f8195368e

parent

1f2a6245ab1e503dee017ab617aaeda816ecb383

3 files changed, 33 insertions(+), 12 deletions(-)

changed files
M src/index.jssrc/index.js
@@ -29,14 +29,7 @@ post: posts.get(ctx.params.filename)
}) }) -const tags = new Map() -for (let [, post] of posts) { - if (post.data.has('tags')) { - for (let tag of post.data.get('tags')) { - tags.set(tag, (tags.get(tag) || []).concat([post])) - } - } -} +const tags = Posts.toTags(posts) router.get('/tags/:tag', async function (ctx) { ctx.assert(tags.has(ctx.params.tag), 404, 'Tag not found') await ctx.render('tag', {
M src/modules/posts.jssrc/modules/posts.js
@@ -44,7 +44,20 @@ .map(f => [getTitle(f), f])
) } +function toTags (posts) { + const tags = new Map() + for (let [, post] of posts) { + if (post.data.has('tags')) { + for (let tag of post.data.get('tags')) { + tags.set(tag, (tags.get(tag) || []).concat([post])) + } + } + } + return tags +} + module.exports = { get, - getFolder + getFolder, + toTags }
M test/modules/posts.test.jstest/modules/posts.test.js
@@ -1,7 +1,7 @@
const test = require('ava') const path = require('path') -const posts = require('../../src/modules/posts.js') +const Posts = require('../../src/modules/posts.js') test('get', t => { const expected = new Map(
@@ -11,7 +11,7 @@ description: 'Test file',
tags: ['a', 'b'] }) ) - const post = posts.get(path.resolve(__dirname, '../data/testfile.md')) + const post = Posts.get(path.resolve(__dirname, '../data/testfile.md')) t.deepEqual(post.data, expected) t.is(post.basename, 'testfile', 'must include basename') })
@@ -24,7 +24,7 @@ description: 'Test file',
tags: ['a', 'b'] }) ) - const actual = posts.getFolder(path.resolve(__dirname, '../data/')) + const actual = Posts.getFolder(path.resolve(__dirname, '../data/')) t.true(actual.size > 0, 'must return a non-empty map') t.is( actual.get('testfile').path,
@@ -32,3 +32,18 @@ path.resolve(__dirname, '../data/testfile.md')
) t.deepEqual(actual.get('testfile').data, expected) }) + +test('toTags', t => { + const posts = new Map([ + [ + 'testfile', + { + data: new Map([['title', 'Test Post'], ['tags', ['a', 'b']]]) + } + ] + ]) + const actual = Posts.toTags(posts) + t.is(actual.size, 2) + t.is(actual.get('a')[0].data.get('title'), 'Test Post') + t.deepEqual(actual.get('a'), actual.get('b')) +})