Packages
fermo
0.14.0
0.20.1
0.20.0
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.1
0.17.0
0.16.7
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.4
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A static site generator
Current section
Files
Jump to
Current section
Files
lib/fermo/template.ex
defmodule Fermo.Template do
import Fermo.Naming, only: [source_path_to_module: 1]
import Mix.Fermo.Paths, only: [absolute_to_source: 1]
@callback defaults_for(module()) :: Map.t()
def defaults_for(module) do
apply(module, :defaults, [])
|> Enum.into(
%{},
fn {key, value} ->
{String.to_atom(key), value}
end
)
end
@callback params_for(module(), Map.t()) :: Map.t()
def params_for(module, page) do
defaults = defaults_for(module)
Map.merge(defaults, page.params)
end
def render_template(module, template, page, params \\ %{}) do
context = build_context(module, template, page)
apply(module, :call, [params, context])
end
@callback build_context(module(), String.t(), Map.t()) :: Map.t()
def build_context(module, template, page) do
env = System.get_env()
%{
module: module,
template: template,
page: page,
env: env
}
end
@callback module_for_template(String.t()) :: module()
def module_for_template(template) do
template
|> absolute_to_source()
|> source_path_to_module()
end
@callback content_for(module(), [term()]) :: term()
def content_for(module, args), do: apply(module, :content_for, args)
end