# ETagPlug

[![Coverage Status](](

This plug generates shallow [ETags](

Shallow means that it uses the whole response to generate the ETag and does not care about the specific content of each response. It is not context sensitive. For a deep (speak context sensitive) generation of ETags you can take a look at [Phoenix ETag](

## Installation

The plug can be installed by adding `etag_plug` to your list of dependencies in `mix.exs`:

def deps do
    {:etag_plug, "~> 0.1.0"}

Documentation can be generated with [ExDoc]( and published on [HexDocs]( Once published, the docs can be found at [](

# Usage

You can simply use the plug without any configuration, it then defaults to the configuration as specified in the "Configuration" section.

    plug ETag.Plug

You can also provide a number of options, see the "Configuration" section for details.

    plug ETag.Plug,
      generator: MyCustomGenerator,
      methods: ["GET", "HEAD"],
      status_codes: [:ok, 201, :not_modified]

## Configuration
### `generator`

Expects a module implementing the `ETag.Generator` behaviour. The plug ships with a number of "default" generators:

- `ETag.Generator.MD5`
- `ETag.Generator.SHA1`
- `ETag.Generator.SHA512`

__Default__: `Application.fetch_env!(:etag_plug, :generator)`

### `methods`

Expects a list of strings, describing the HTTP methods for which ETags should be generated and evaluated.

__Default__: `Application.fetch_env!(:etag_plug, :methods)`

### `status_codes`

Expects an enumerable of integers (or status atoms) which define the statuses for which ETags should be handled and generated.

__Default__: `Application.fetch_env!(:etag_plug, :status_codes)`