Aino.Middleware.Routes (aino v0.2.0)

An Aino set of middleware for dealing with routes and routing

Examples

To use the routes middleware together, see the example below.

routes([
  get("/orders", &Orders.index/1, as: :orders),
  get("/orders/:id", [&Orders.authorize/1, &Order.show/1], as: :order),
  post("/orders", &Orders.create/1),
  post("/orders/:id", [&Orders.authorize/1, &Order.update/1])
])

def handle(token) do
  middleware = [
    Aino.Middleware.common(),
    &Aino.Middleware.Routes.routes(&1, routes()),
    &Aino.Middleware.Routes.match_route/1,
    &Aino.Middleware.params/1,
    &Aino.Middleware.Routes.handle_route/1
  ]

  Aino.Token.reduce(token, middleware)
end

In the example above you can see why match_route/1 and handle_route/1 are separate functions, you can perform other middleware in between the two. In this example, params are merged together via Aino.Middleware.params/1 before handling the route.

Link to this section Summary

Functions

Create a DELETE route

Run the matched route from match_route/1

Matches the request against routes on the token

Configure routes for the handler

Set routes for the token

Link to this section Functions

Link to this function

compile_routes_module(routes)

Link to this function

delete(path, middleware, opts \\ [])

Create a DELETE route

Examples

routes = [
  delete("/orders/:id", [&Orders.authorize/1, &Order.delete/1], as: :order)
]
Link to this function

get(path, middleware, opts \\ [])

Create a GET route

Examples

routes = [
  get("/orders", &Orders.index/1, as: :orders),
  get("/orders/:id", [&Orders.authorize/1, &Order.show/1], as: :order)
]
Link to this function

handle_route(token)

Run the matched route from match_route/1

If no route is present, nothing happens. If a route is present, the middleware stored on the token from the matched request is reduced over.

Link to this function

match_route(token)

Matches the request against routes on the token

Must have routes set via routes/2 before running this middleware.

You should run handle_route/1 after matching the route, otherwise the route is not run.

Adds the following keys to the token [:path_params, :route_middleware]

Link to this function

post(path, middleware, opts \\ [])

Create a POST route

Examples

routes = [
  post("/orders", &Orders.create/1, as: :orders),
  post("/orders/:id", [&Orders.authorize/1, &Order.update/1], as: :order)
]
Link to this macro

routes(routes_list)

(macro)

Configure routes for the handler

Defines routes/0 and __MODULE__.Routes for route helper functions

When defining routes, provide the :as option to have _path and _url functions generated for you. E.g. as: :sign_in will generate Routes.sign_in_path/2 and Routes.sign_in_url/2.

Note that when defining routes, you must only define one :as a particular atom. For instance, if you have multiple routes pointing at the url /orders/:id, you should only add as: :order to the first route.

routes([
  get("/", &MyApp.Web.Page.root/1, as: :root),
  get("/sign-in", &MyApp.Web.Session.show/1, as: :sign_in),
  post("/sign-in", &MyApp.Web.Session.create/1),
  delete("/sign-out", &MyApp.Web.Session.delete/1, as: :sign_out),
  get("/orders", &MyApp.Web.Orders.index/1, as: :orders),
  get("/orders/:id", &MyApp.Web.Orders.show/1, as: :order)
])
Link to this function

routes(token, routes)

Set routes for the token

Adds the following keys to the token [:routes]