Current section

Files

Jump to
zest lib connections.ex
Raw

lib/connections.ex

if Code.ensure_loaded?(Phoenix.ConnTest) do
defmodule Zest.Phoenix do
require Phoenix.ConnTest
alias Phoenix.ConnTest
alias Plug.Conn
@type filter :: {atom, term}
@type filters :: [filters] | filter
@spec new() :: Conn.t
def new(), do: ConnTest.build_conn()
@spec new(filters) :: Conn.t
def new(filters), do: filter(new(), filters)
@html_mime "text/html"
@json_mime "application/json"
@spec filter(Conn.t, filters) :: Conn.t
def filter(conn, [filter | filters]), do: filter(filter(conn, filter), filters)
def filter(conn, []), do: conn
def filter(conn, {:method, :get}), do: %{ conn | method: "GET" }
def filter(conn, {:method, :post}), do: %{ conn | method: "POST" }
def filter(conn, {:headers, headers}), do: headers
def filter(conn, {:params, params}), do: %{ conn | params: params }
def filter(conn, {:accept, :json}), do: header(:accept, @json_mime)
def filter(conn, {:accept, :html}), do: header(:accept, @html_mime)
def filter(conn, {:response_type, :json}), do: Conn.put_resp_content_type(conn, @json_mime)
def filter(conn, {:type, :json}), do: filter(conn, accept: :json, response_type: :json)
def filter(conn, {:auth, value}), do: header(conn, :authorization, value)
def filter(conn, {:bearer_auth, token})
when is_binary(token), do: filter(conn, auth: "Bearer " <> token)
def headers(conn, headers) when is_list(headers) do
Enum.reduce(headers, conn, &headers(&2, &1))
end
def headers(conn, {name, value})
when is_atom(name) and is_binary(value) do
header(conn, Atom.to_string(name), value)
end
def headers(conn, {name, value})
when is_binary(name) and is_binary(value) do
Conn.put_req_header(conn, name, value)
end
end
end