require "../handler" class Guff::Handlers::BlogHandler < Guff::Handler 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 || "" 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