Packages

A collection of Plug middleware for web applications

Current section

Files

Jump to
plugs lib sugar plugs hot_code_reload.ex
Raw

lib/sugar/plugs/hot_code_reload.ex

defmodule Sugar.Plugs.HotCodeReload do
import Plug.Conn
@behaviour Plug
def init(opts), do: opts
def call(conn, _) do
case reload(Mix.env) do
:ok ->
location = "/" <> Enum.join conn.path_info, "/"
conn
|> put_resp_header("location", location)
|> send_resp_if_not_sent(302, "")
_ -> conn
end
end
defp reload(:dev) do
Mix.Tasks.Compile.Elixir.run([])
end
defp reload(_), do: :noreload
defp send_resp_if_not_sent(%Plug.Conn{state: :sent} = conn, _, _) do
conn
end
defp send_resp_if_not_sent(conn, status, body) do
conn |> send_resp(status, body)
end
end