Current section

Files

Jump to
mouth lib plug inbox_preview.ex
Raw

lib/plug/inbox_preview.ex

if Code.ensure_loaded?(Plug) do
defmodule Plug.Mouth.InboxPreview do
@moduledoc """
Plug that serves pages useful for previewing messages in development.
It takes one option at initialization:
* `base_path` - sets the base URL path where this module is plugged. Defaults
to `/`.
## Examples
# in a Phoenix router
defmodule Sample.Router do
scope "/dev" do
pipe_through [:browser]
forward "/inbox", Plug.Mouth.InboxPreview, [base_path: "/dev/inbox"]
end
end
"""
use Plug.Router
use Plug.ErrorHandler
alias Mouth.LocalAdapter.Storage.Memory
require EEx
EEx.function_from_file(:defp, :template, "priv/templates/inbox_preview/index.html.eex", [:assigns])
def call(conn, opts) do
conn =
conn
|> assign(:base_path, opts[:base_path] || "")
|> assign(:storage_driver, opts[:storage_driver] || Memory)
super(conn, opts)
end
plug(:match)
plug(:dispatch)
get "/" do
messages = conn.assigns.storage_driver.all()
conn
|> put_resp_content_type("text/html")
|> send_resp(200, template(messages: messages, message: nil, conn: conn))
end
get "/:id" do
messages = conn.assigns.storage_driver.all()
message = conn.assigns.storage_driver.get(id)
conn
|> put_resp_content_type("text/html")
|> send_resp(200, template(messages: messages, message: message, conn: conn))
end
match _ do
send_resp(conn, 404, "not found")
end
defp to_absolute_url(conn, path) do
URI.parse("#{conn.assigns.base_path}/#{path}").path
end
end
end