View Source PlugHTTPValidator (plug_http_validator v0.1.0)

Documentation for PlugHTTPValidator.

Link to this section Summary

Functions

Sets HTTP validators using the object(s) passed into parameter

Link to this section Types

@type object() :: %{optional(:updated_at) => DateTime.t(), required(any()) => any()}
@type objects() :: [object()]
@type opt() ::
  {:updated_at_field, any()}
  | {:etag_field, any()}
  | {:etag_strength, :weak | :strong}
@type opts() :: [opt()]

Link to this section Functions

Link to this function

set(conn, object_or_objects, opts \\ [])

View Source
@spec set(Plug.Conn.t(), objects() | object(), opts()) :: Plug.Conn.t()

Sets HTTP validators using the object(s) passed into parameter

Call this plug before sending the response, for example:

def index(conn, _params) do
  posts = MyApp.list_posts()

  conn
  |> PlugHTTPValidator.set(posts)
  |> render("index.json", posts: posts)
end

def create(conn, params) do
  # 201 status code is not cacheable by default

  with {:ok, post} <- MyApp.create_post(params) do
    conn
    |> put_status(:created)
    |> put_resp_header("location", Routes.post_path(conn, :show, post))
    |> render("show.json", post: post)
  end
end

def show(conn, %{"id" => id}) do
  with {:ok, post} = MyApp.get_post(id) do
    conn
    |> PlugHTTPValidator.set(post)
    |> render("show.txt", post: post)
  end
end

By default, this function sets the last-modified response header using the :updated_at field of the object(s), taking the most recent if there are more than one object.

options

Options

  • :updated_at_field: the date field to use to set the last-modified header. Defaults to :update_at. The field must be a DateTime.t/0 struct
  • :etag_field: the field to set the etag from. No default, that is by default no etag response header is set. The etag field must be present in the object(s) passed as a parameter, otherwise the call will crash. Make sure to understand what an etag is before using it
  • :etag_strength: the strenght of the etag, :weak or :strong. Defaults to :weak