defmodule Fermo do
@moduledoc """
Fermo provides the main entry points for configuring a project
"""
@build Application.get_env(:fermo, :build, Fermo.Build)
@pagination Application.get_env(:fermo, :pagination, Fermo.Pagination)
def start(_start_type, _args \\ []) do
{:ok, _pid} = Fermo.Assets.start_link()
{:ok, _pid} = I18n.start_link()
{:ok, self()}
end
@doc false
defmacro __using__(opts \\ %{}) do
quote do
require Fermo
@before_compile Fermo
Module.register_attribute __MODULE__, :config, persist: true
@config unquote(opts)
import Fermo.Assets
import I18n
end
end
@doc false
defmacro __before_compile__(_env) do
quote do
def initial_config() do
hd(__MODULE__.__info__(:attributes)[:config])
|> Fermo.Config.initial()
end
end
end
def page(config, template, filename, params \\ nil) do
Fermo.Config.add_page(config, template, filename, params)
end
def paginate(config, template, options \\ %{}, context \\ %{}, fun \\ nil) do
@pagination.paginate(config, template, options, context, fun)
end
def build(config) do
@build.run(config)
end
end