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