Tokumei

Tiny but MIGHTY Elixir webframework

defmodule MyApp.WWW do
  Use Tokumei

  @static "./public"

  route ["greeting", name] do
    :GET ->
      ok("Hello, #{name}!")
  end

  error %NotFoundError do
    not_found("Could not find what you were looking for!")
  end
end

Dive in

N.B. Generator outdated setups up 0.3.0 project

mix archive.install https://github.com/crowdhailer/tokumei/raw/master/tokumei_new.ez
mix tokumei.new my_app
cd my_app
iex -S mix

visit localhost:8080

Usage

  1. Explore the water cooler example in this repository.
  2. Documentation is available, on hexdocs, for all middleware modules.

Development Goals

  • [x] Route by url

  • [x] Match segements with path variables

  • [x] Routing by HTTP method

  • [x] Access request in match

  • [x] Access server config in match

  • [x] Document chunked/SSE’s

  • [x] Document static

  • [x] Document templates

  • [x] Add remaining HTTP method matchers.

  • [x] Test routing DSL

  • [x] Add error handling within actions

  • [x] Add logging layer

  • [x] named routes

  • [x] path/url helpers

  • [x] Draft designing a DSL

  • [x] mod docs routing

  • [x] all middleware mod docs

  • [ ] write overview article

  • [ ] Document and test templates

  • [ ] Make server configurable

  • [ ] Extract starting as application from starting as supervised process

  • [ ] test starting as endpoint start_link and as application start

  • [ ] publish why raxx article

  • [ ] publish build your own middleware article

  • [ ] chunked responses

  • [ ] Test streaming

  • [ ] Handle messages to server without sending a chunk

  • [ ] Handle fact that server pid may be known after streaming completes, subscriptions are still open, possibly always close

  • [ ] mod docs streaming

  • [ ] HTTPS setup with lets encrypt

  • [ ] article Setting up without generator

  • [ ] Deployment examples. Digital Ocean, Vagrant, Kuberneties

  • [ ] Add wobserver

  • [ ] Handle Server Errors, url too long, request too slow, request too large

  • [ ] remove redirect from patch

  • [ ] back(request) -> response

  • [ ] Cookies, Sessions and Flash

  • [ ] Consider before and after filters, implemented as a raxx middleware

      before request, config do
        request # OR {:error, reason}
      end
    
    after response, config do
        request # OR {:error, reason}
      end
  • [ ] Sending files from action https://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L384

  • [ ] Send file middleware, a return value of {:file, path} -> response

  • [ ] Send content as an attachment https://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L373

  • [ ] HTTP/2 promises API, integration with raxx_chatterbox

  • [ ] layout and partials

  • [ ] Code reloading

  • [ ] Example with JS compilation, add to generator

  • [ ] Generate sitemap.xml from router

  • [ ] Basic Auth wrapper, with whitelist