defmodule Xmeta.Xapi.Docs.Plug do
use Plug.Router
require EEx
# if Mix.env() == :dev do
# use Plug.Debugger
# end
use Plug.ErrorHandler
plug(Plug.Parsers,
parsers: [:urlencoded, :json],
json_decoder: Jason
)
plug(Plug.Logger, log: :debug)
plug(:match)
plug(:dispatch)
@impl true
def init(options) do
# initialize options
options
end
get "/" do
render_html(conn, "home.html", amisJSON: Xmeta.Xapi.Docs.Amis.amisJSON())
# send_resp(conn, 200, Xmeta.Docs.HomeTemplate.html())
end
match "/router/:mod/json" do
mod_name = conn.params["mod"]
mod = mod_name |> String.split(".") |> Module.concat
conn
|> put_resp_content_type("application/json")
|> send_resp(200, Jason.encode!(Xmeta.Xapi.Docs.Amis.get_router_view(mod)))
end
match "/view/:mod/json" do
mod_name = conn.params["mod"]
mod = mod_name |> String.split(".") |> Module.concat
conn
|> put_resp_content_type("application/json")
|> send_resp(200, Jason.encode!(Xmeta.Xapi.Docs.Amis.get_view(mod)))
end
match _ do
send_resp(conn, 404, "not found")
end
defp render_html(%{status: status} = conn, template, assigns \\ []) do
template_dir = __MODULE__.__info__(:compile)[:source] |> Path.dirname
template_dir = template_dir
body =
template_dir
|> Path.join(template)
|> String.replace_suffix(".html", ".html.eex")
|> EEx.eval_file(assigns)
send_resp(conn, status || 200, body)
end
end