README.md


# Gate Library

Gate is a macro-based library that provides pipeline functionality similar to Phoenix's pipelines. It allows you to define reusable plug pipelines with conditional execution and use them in your Plug.Router.

## Installation

Add `Gate` to your list of dependencies in `mix.exs`:

```elixir
defp deps do
  [
    {:gate, "~> 0.0.1"}.
  ]
end
```

Then, run `mix deps.get` to fetch the dependencies.

## Usage

Define your router using the `Gate` library:

```elixir
defmodule MyApp.Router do
  use Plug.Router
  use Gate

  gate :browser do
    plug :put_resp_content_type, "text/html"
    plug Plug.Logger
    plug :auth_required

    get "/" do
      send_resp(conn, 200, "Welcome to the homepage")
    end
  end

  gate :api do
    plug :put_resp_content_type, "application/json"
    plug Plug.Logger

    get "/api" do
      send_resp(conn, 200, ~s({"message": "Welcome to the API"}))
    end
  end

  match _ do
    send_resp(conn, 404, "Oops!")
  end

  defp put_resp_content_type(conn, type) do
    Plug.Conn.put_resp_content_type(conn, type)
  end

  defp auth_required(conn) do
    if get_req_header(conn, "authorization") == ["Bearer valid_token"] do
      true
    else
      Plug.Conn.send_resp(conn, 401, "Unauthorized")
      false
    end
  end
end
```

## License

This project is licensed under the MIT License.