Packages
plug
0.5.1
1.20.3
1.20.2
1.20.1
retired
1.20.0
retired
1.19.5
1.19.4
1.19.3
1.19.2
1.19.1
1.19.0
1.18.5
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.6
1.16.5
1.16.4
1.16.3
1.16.2
1.16.1
1.16.0
1.15.6
1.15.5
1.15.4
1.15.3
1.15.2
1.15.1
1.15.0
1.14.2
1.14.1
1.14.0
1.13.6
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
retired
1.13.0
retired
1.12.1
1.12.0
1.11.1
1.11.0
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.3
1.8.2
1.8.1
1.8.0
1.7.2
1.7.1
1.7.0
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.1
1.5.0
1.5.0-rc.2
1.5.0-rc.1
1.5.0-rc.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-rc.0
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.0
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.14.0
0.13.1
0.13.0
0.12.2
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.4
0.4.3
0.4.2
0.4.1
Compose web applications with functions
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/plug.ex
defmodule Plug do
@moduledoc """
The plug specification.
There are two kind of plugs: function plugs and module plugs. A
function plug is any function that receives a connection and a
set of options and returns a connection. Its type signature must be:
(Plug.Conn.t, Plug.opts) :: Plug.Conn.t
A module plug is an extension of the function plug. It must export a
`call/2` function, with the signature defined above, but it must also
provide an `init/1` function, for initialization of the options.
The result returned by `init/1` is the one given as second argument to
`call/2`. Note `init/1` may be called during compilation and as such
it must not return pids, ports or values that are not specific to the
runtime.
The API expected by a module plug is defined as a behaviour by the
`Plug` module (this module).
## Wrappers
A wrapper is a module that exports two functions: `init/1` and `wrap/3`.
A wrapper is similar to a module plug except it receives a function
containing the remaining of the stack as third argument. Wrappers must
be reserved to the special cases where wrapping the whole stack is
required.
The behaviour specification of a wrapper can be found in the `Plug.Wrapper`
module.
## The Plug stack
The plug specification was designed so it can connect all three different
mechanisms together in a same stack:
* function plugs
* module plugs
* and wrappers
An implementation of how such plug stacks can be achieved is defined in
the `Plug.Builder` module.
"""
@type opts :: tuple | atom | integer | float | [opts]
use Behaviour
use Application
defcallback init(opts) :: opts
defcallback call(Plug.Conn.t, opts) :: Plug.Conn.t
@doc false
def start(_type, _args) do
import Supervisor.Spec
spec = [worker(Plug.Upload, [])]
opts = [strategy: :one_for_one, name: Plug.Supervisor]
Supervisor.start_link(spec, opts)
end
end