Packages

spark

2.2.52
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 dsl extension entity.ex
Raw

lib/spark/dsl/extension/entity.ex

defmodule Spark.Dsl.Extension.Entity do
@moduledoc false
def setup(module, recursive_as, nested_key, opts, arg_values) do
parent_recursive_as = Process.get(:parent_recursive_as)
original_nested_entity_path = Process.get(:recursive_builder_path)
nested_entity_path =
if is_nil(original_nested_entity_path) do
Process.put(:recursive_builder_path, [])
[]
else
unless recursive_as || nested_key || parent_recursive_as do
raise "Somehow got a nested entity without a `recursive_as` or `nested_key`"
end
path =
(original_nested_entity_path || []) ++
[recursive_as || nested_key || parent_recursive_as]
Process.put(
:recursive_builder_path,
path
)
path
end
if recursive_as do
Process.put(:parent_recursive_as, recursive_as)
end
current_sections = Process.get({module, :spark_sections}, [])
keyword_opts =
Keyword.merge(
opts,
arg_values,
fn key, _, _ ->
raise Spark.Error.DslError,
module: module,
message: "Multiple values for key `#{inspect(key)}`",
path: nested_entity_path
end
)
Process.put(
{:builder_opts, nested_entity_path},
keyword_opts
)
{original_nested_entity_path, parent_recursive_as, nested_entity_path, current_sections}
end
def handle(
module,
section_path,
nested_entity_keys,
entity_builder,
extension,
{original_nested_entity_path, parent_recursive_as, nested_entity_path, current_sections}
) do
Process.put(:recursive_builder_path, original_nested_entity_path)
Process.put(:parent_recursive_as, parent_recursive_as)
current_config =
Process.get(
{module, :spark, section_path ++ nested_entity_path},
%{entities: [], opts: []}
)
opts = Process.delete({:builder_opts, nested_entity_path})
nested_entities =
nested_entity_keys
|> Enum.reduce(%{}, fn key, acc ->
nested_path = section_path ++ nested_entity_path ++ [key]
entities =
{module, :spark, nested_path}
|> Process.get(%{entities: []})
|> Map.get(:entities, [])
Process.delete({module, :spark, nested_path})
Map.update(acc, key, entities, fn current_nested_entities ->
(current_nested_entities || []) ++ entities
end)
end)
built = entity_builder.__build__(module, opts, nested_entities)
new_config = %{current_config | entities: current_config.entities ++ [built]}
unless {extension, section_path} in current_sections do
Process.put({module, :spark_sections}, [
{extension, section_path} | current_sections
])
end
Process.put(
{module, :spark, section_path ++ nested_entity_path},
new_config
)
end
end