Packages

spark

2.2.57
2.7.2 2.7.1 2.7.0 2.6.1 2.6.0 2.5.0 2.4.1 2.4.0 2.3.14 2.3.13 2.3.12 2.3.11 2.3.10 2.3.9 2.3.8 2.3.7 2.3.6 2.3.5 2.3.4 2.3.3 2.3.2 2.3.1 2.3.0 2.2.69 2.2.68 2.2.67 2.2.66 2.2.65 2.2.64 2.2.63 2.2.62 2.2.61 2.2.60 2.2.59 2.2.58 2.2.57 2.2.56 2.2.55 2.2.54 2.2.53 2.2.52 2.2.51 2.2.50 2.2.49 2.2.48 2.2.47 2.2.46 2.2.45 2.2.44 2.2.43 2.2.42 2.2.41 2.2.40 2.2.39 2.2.38 2.2.37 2.2.36 2.2.35 2.2.34 2.2.33 2.2.32 2.2.31 2.2.30 2.2.29 2.2.28 2.2.27 2.2.26 2.2.25 2.2.24 2.2.23 2.2.22 2.2.21 2.2.20 2.2.19 2.2.18 2.2.17 2.2.16 2.2.15 2.2.14 2.2.13 2.2.12 2.2.11 2.2.10 2.2.9 2.2.8 2.2.7 2.2.6 2.2.5 2.2.4 2.2.3 2.2.2 2.2.1 2.2.0 2.1.24 2.1.23 2.1.22 2.1.21 2.1.20 2.1.19 2.1.18 2.1.17 2.1.16 2.1.15 2.1.14 2.1.13 2.1.12 2.1.11 2.1.10 2.1.9 2.1.8 2.1.7 2.1.6 2.1.5 2.1.4 2.1.3 2.1.2 2.1.1 2.1.0 2.0.1 2.0.0 1.1.55 1.1.54 1.1.53 1.1.52 1.1.51 1.1.50 1.1.49 1.1.48 1.1.47 1.1.46 1.1.45 1.1.44 1.1.43 1.1.42 1.1.41 1.1.40 1.1.39 1.1.38 1.1.37 1.1.36 1.1.35 1.1.34 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.26 1.1.25 1.1.24 1.1.22 1.1.21 1.1.20 1.1.19 1.1.18 1.1.17 1.1.16 1.1.15 1.1.14 retired 1.1.13 1.1.12 1.1.11 1.1.10 1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.9 1.0.8 1.0.7 1.0.6 1.0.5 1.0.4 1.0.3 1.0.2 1.0.1 1.0.0 0.4.12 0.4.11 0.4.10 0.4.9 0.4.8 0.4.7 0.4.6 0.4.5 0.4.4 0.4.3 0.4.2 0.4.1 0.3.12 0.3.11 0.3.10 0.3.9 0.3.8 0.3.7 0.3.6 0.3.5 0.3.4 0.3.3 0.3.2 0.3.1 0.3.0 0.2.18 0.2.17 0.2.16 0.2.15 0.2.14 0.2.13 0.2.12 0.2.11 0.2.10 0.2.9 0.2.8 0.2.7 0.2.6 0.2.5 0.2.4 0.2.3 0.2.2 0.2.1 0.2.0 0.1.29 0.1.28 0.1.27 0.1.26 0.1.25 0.1.24 0.1.23 0.1.22 0.1.21 0.1.20 0.1.19 0.1.18 0.1.17 0.1.16 0.1.15 0.1.14 0.1.13 0.1.12 0.1.11 0.1.10 0.1.9 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

Generic tooling for building DSLs

Current section

Files

Jump to
spark lib spark docs.ex
Raw

lib/spark/docs.ex

defmodule Spark.Docs do
@moduledoc """
Tools for generating docs & search data for extras.
"""
@doc """
Generates searchable documentation suitable for ex_doc
"""
def search_data_for(dsl) do
dsl.sections()
|> Enum.flat_map(fn section ->
section_search_data(section)
end)
|> Enum.concat(
Enum.flat_map(dsl.dsl_patches(), fn %Spark.Dsl.Patch.AddEntity{
section_path: section_path,
entity: entity
} ->
entity_search_data(entity, section_path)
end)
)
end
defp section_search_data(section, path \\ []) do
schema_path =
if section.top_level? do
path
else
path ++ [section.name]
end
Enum.concat([
[
%{
anchor: anchor(schema_path),
body: section.describe,
title: title(schema_path),
type: "DSL"
}
],
schema_search_data(section.schema, schema_path),
Enum.flat_map(section.entities, &entity_search_data(&1, schema_path)),
Enum.flat_map(section.sections, &section_search_data(&1, schema_path))
])
|> Enum.map(fn search_item ->
if section.top_level? do
%{search_item | anchor: "#{section.name}-#{search_item.anchor}"}
else
search_item
end
end)
end
defp entity_search_data(entity, path) do
Enum.concat([
[
%{
anchor: anchor(path ++ [entity.name]),
body: entity.describe,
title: title(path ++ [entity.name]),
type: "DSL"
}
],
schema_search_data(entity.schema, path ++ [entity.name]),
Enum.flat_map(entity.entities, fn {_key, entities} ->
Enum.flat_map(entities, fn nested_entity ->
entity_search_data(nested_entity, path ++ [entity.name])
end)
end)
])
end
defp schema_search_data(schema, path) do
Enum.flat_map(schema, fn {key, config} ->
if config[:hide] do
[]
else
[
%{
anchor: anchor(path ++ [key]),
body: config[:doc] || "",
title: title(path ++ [key]),
type: "DSL"
}
]
end
end)
end
defp anchor(list), do: Enum.join(list, "-")
defp title(list), do: Enum.join(list, ".")
end