about summary refs log tree commit diff stats
path: root/src/actions.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/actions.js')
-rw-r--r--src/actions.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/actions.js b/src/actions.js
new file mode 100644
index 0000000..c6e04c0
--- /dev/null
+++ b/src/actions.js
@@ -0,0 +1,56 @@
+'use strict'
+
+const send = require('koa-send')
+const streamify = require('stream-array')
+const responders = require('./responders')
+
+function toArrayStream (iterator) {
+  return streamify(Array.from(iterator.entries()))
+}
+
+function home (config, posts) {
+  const postsStream = toArrayStream(posts)
+  return async function (ctx, next) {
+    responders.home(ctx, config, postsStream)
+  }
+}
+
+function post (config, posts) {
+  return async function (ctx, next) {
+    ctx.assert(posts.has(ctx.params.filename), 404, 'Post not found')
+    const post = posts.get(ctx.params.filename)
+
+    responders.post(ctx, config, post)
+  }
+}
+
+function taxonGenerator (config, term, items) {
+  return async function (ctx, next) {
+    const value = ctx.params.value
+    ctx.assert(
+      items.has(ctx.params.value),
+      404,
+      `Could not find ${term} ${value}`
+    )
+
+    const taxonItems = toArrayStream(items.get(value))
+
+    responders.taxon(ctx, config, taxonItems)
+  }
+}
+
+const prefix = /^\/static\//
+async function serveFiles (ctx) {
+  if (prefix.test(ctx.path)) {
+    await send(ctx, ctx.path.replace(prefix, ''), {
+      root: './static'
+    })
+  }
+}
+
+module.exports = {
+  home,
+  post,
+  taxonGenerator,
+  serveFiles
+}