From 575e4c49131e7699fc23fca78ec14b400680839a Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Tue, 8 Mar 2016 16:57:28 -0500 Subject: clean up blog handler --- src/guff/blog-handler.cr | 147 ++++++++++++++++++++++++++++++----------------- 1 file changed, 95 insertions(+), 52 deletions(-) diff --git a/src/guff/blog-handler.cr b/src/guff/blog-handler.cr index 577ce70..988eab5 100644 --- a/src/guff/blog-handler.cr +++ b/src/guff/blog-handler.cr @@ -2,61 +2,104 @@ require "./handler" module Guff class BlogHandler < Handler - MATCHES = [%r{ - ^/ - - # match YYYY/MM/DD/SLUG.html - (?\d{4}) - / - (?\d{2}) - / - (?\d{2}) - / - (?[a-z0-9._-]+) - \.html - - $ - }x, %r{ - ^/ - - # match YYYY/MM/DD - (?\d{4}) - / - (?\d{2}) - / - (?\d{2}) - /? - - $ - }x, %r{ - ^/ - - # match YYYY/MM - (?\d{4}) - / - (?\d{2}) - /? - - $ - }x, %r{ - ^/ - - # match YYYY - (?\d{4}) - /? - - $ - }x, %r{ - # match index - ^/$ - }x] + ROUTES = [{ + list: false, + blog: true, + re: %r{ + ^/ + + # match YYYY/MM/DD/SLUG.html + (?\d{4}) + / + (?\d{2}) + / + (?\d{2}) + / + (?[a-z0-9._-]+) + \.html + + $ + }x, + }, { + list: true, + blog: true, + re: %r{ + ^/ + + # match YYYY/MM/DD + (?\d{4}) + / + (?\d{2}) + / + (?\d{2}) + /? + + $ + }x, + }, { + list: true, + blog: true, + re: %r{ + ^/ + + # match YYYY/MM + (?\d{4}) + / + (?\d{2}) + /? + + $ + }x, + }, { + list: true, + blog: true, + re: %r{ + ^/ + + # match YYYY + (?\d{4}) + /? + + $ + }x, + }, { + list: false, + blog: false, + re: %r{ + ^/ + + # match slug + (?[a-z0-9._-]+) + \.html + + $ + }x, + }, { + list: true, + blog: true, + re: %r{ + # match index + ^/$ + }x, + }] def call(context : HTTP::Server::Context) path = context.request.path || "" - if md = MATCHES.reduce(nil) { |r, m| r || m.match(path) } - context.response.puts "blog match: %s" % [md.to_s] - else - call_next(context) + + call_next(context) unless ROUTES.reduce(false) do |matched, route| + unless matched + if md = (route[:re] as Regex).match(path) + # matched route + matched = true + + context.response.puts "blog: route = %s, md = %s" % [ + route.to_s, + md.to_s + ] + end + end + + matched end end end -- cgit v1.2.3