Packages

Dependency graphs for optimal function call ordering

Current section

Files

Jump to
pacer lib workflow docs.ex
Raw

lib/workflow/docs.ex

defmodule Pacer.Docs do
@moduledoc """
This module is responsible for extracting information provided to fields
in a Pacer.Workflow `graph` definition and turning that information into
docs that can be rendered into a module's documentation.
"""
alias Pacer.Workflow.FieldNotSet
defmacro generate do
quote do
docs =
Enum.reduce(@pacer_docs, "\n## Pacer Fields:\n\n", fn
{field, doc}, markdown ->
markdown <>
"\n - `#{field}`\n#{Pacer.Docs.write_doc(doc)}#{Pacer.Docs.write_default(Keyword.get(@pacer_struct_fields, field))}#{Pacer.Docs.write_dependencies(Keyword.get(@pacer_dependencies, field))}"
{field, batch, doc}, markdown ->
field_dependencies = @pacer_batch_dependencies |> List.keyfind!(field, 1) |> elem(2)
markdown <>
"\n - `#{field}`\n#{Pacer.Docs.write_doc(doc)}\t - **Batch**: `#{batch}`\n#{Pacer.Docs.write_default(Keyword.get(@pacer_struct_fields, field))}#{Pacer.Docs.write_dependencies(field_dependencies)}"
end)
case Module.get_attribute(__MODULE__, :moduledoc) do
{v, original_doc} ->
Module.put_attribute(
__MODULE__,
:moduledoc,
{v, original_doc <> docs}
)
nil ->
Module.put_attribute(__MODULE__, :moduledoc, {__ENV__.line, docs})
end
end
end
def write_doc(""), do: ""
def write_doc(doc), do: "\t - #{doc}\n"
def write_default(%FieldNotSet{}), do: ""
def write_default(default), do: "\t - **Default**: `#{inspect(default)}`\n"
def write_dependencies([]), do: "\t - *No dependencies*\n"
def write_dependencies(deps), do: "\t - **Depends on**: `#{inspect(deps)}`\n"
end