Current section
Files
Jump to
Current section
Files
lib/argo/template.ex
defmodule Argo.Template do
@moduledoc """
A template helpers.
"""
defmodule UndefinedError do
@moduledoc """
Exception raised when a template cannot be found.
"""
defexception [:available, :template, :module, :root, :assigns]
def message(exception) do
# <> "please define a matching clause for render/2 or define a template at "
"Could not render #{inspect(exception.template)} for #{inspect(exception.module)}, " <>
"please define a template at " <>
"#{inspect(Path.relative_to_cwd(exception.root))}. " <>
available_templates(exception.available) <>
"\nAssigns:\n\n" <>
inspect(exception.assigns) <>
"\n\nAssigned keys: #{inspect(Keyword.keys(exception.assigns))}\n"
end
defp available_templates([]), do: "No templates were compiled for this module."
defp available_templates(available) do
"The following templates were compiled:\n\n" <>
Enum.map_join(available, "\n", &"* #{&1}") <>
"\n"
end
end
@doc false
def raise_template_not_found(view_module, template, assigns) do
{root, templates} = view_module.__templates__()
raise UndefinedError,
assigns: assigns,
available: Map.keys(templates),
template: template,
root: root,
module: view_module
end
end