From 3bcb1cb42edd48200f1f0b510c6b09b2ead9f601 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= <essen@ninenines.eu>
Date: Fri, 23 Dec 2016 18:52:02 +0100
Subject: Update cowboy_middleware

---
 doc/src/manual/cowboy_middleware.asciidoc | 81 ++++++++++++++++++++-----------
 1 file changed, 54 insertions(+), 27 deletions(-)

(limited to 'doc/src/manual/cowboy_middleware.asciidoc')

diff --git a/doc/src/manual/cowboy_middleware.asciidoc b/doc/src/manual/cowboy_middleware.asciidoc
index 87cd5d2..11aa3e8 100644
--- a/doc/src/manual/cowboy_middleware.asciidoc
+++ b/doc/src/manual/cowboy_middleware.asciidoc
@@ -2,47 +2,74 @@
 
 == Name
 
-cowboy_middleware - behaviour for middlewares
+cowboy_middleware - Middlewares
 
 == Description
 
-The `cowboy_middleware` behaviour defines the interface used
-by Cowboy middleware modules.
+The module `cowboy_middleware` defines a callback interface for
+Cowboy middlewares.
 
 Middlewares process the request sequentially in the order they
 are configured.
 
-== Types
+== Callbacks
 
-=== env() = [{atom(), any()}]
+Middlewares implement the following interface:
 
-The environment variable.
+[source,erlang]
+----
+execute(Req, Env)
+    -> {ok, Req, Env}
+     | {suspend, module(), atom(), [any()]}
+     | {stop, Req}
 
-One is created for every request. It is passed to each
-middleware module executed and subsequently returned,
-optionally with its contents modified.
+Req :: cowboy_req:req()
+Env :: cowboy_middleware:env()
+----
 
-== Callbacks
+The `execute/2` is the only callback that needs to be
+implemented. It must execute the middleware and return
+with instructions for Cowboy.
+
+ok::
+
+Cowboy should continue processing the request using the
+returned Req object and environment.
+
+suspend::
+
+Cowboy will hibernate the process. When resuming, Cowboy
+will apply the returned module, function and arguments.
+
+stop::
+
+Cowboy will stop middleware execution. No other middleware
+will be executed. This effectively ends the processing of
+the request.
+
+== Types
+
+=== env()
+
+[source,erlang]
+----
+env() :: #{atom() => any()}
+----
+
+Middleware environment.
 
-=== execute(Req, Env) -> {ok, Req, Env} | {suspend, Module, Function, Args} | {stop, Req}
+A new environment is created for every request. The initial
+environment contained the user configured environment values
+(like `dispatch` for example) plus the `listener` value which
+contains the name of the listener for this connection.
 
-Req = cowboy_req:req():: The Req object.
-Env = env():: The request environment.
-Module = module():: MFA to call when resuming the process.
-Function = atom():: MFA to call when resuming the process.
-Args = [any()]:: MFA to call when resuming the process.
+Middlewares may modify the environment as necessary.
 
-Execute the middleware.
+== Changelog
 
-The `ok` return value indicates that everything went well
-and that Cowboy should continue processing the request. A
-response may or may not have been sent.
+* *2.0*: The `env` type is now a map instead of a proplist.
+* *1.0*: Behavior introduced.
 
-The `suspend` return value will hibernate the process until
-an Erlang message is received. Note that when resuming, any
-previous stacktrace information will be gone.
+== See also
 
-The `stop` return value stops Cowboy from doing any further
-processing of the request, even if there are middlewares
-that haven't been executed yet. The connection may be left
-open to receive more requests from the client.
+link:man:cowboy(7)[cowboy(7)]
-- 
cgit v1.2.3

