Current section
Files
Jump to
Current section
Files
lib/model/model.ex
defmodule GenDSL.Model do
def filter_model(model) do
model
|> Map.filter(fn {_key, value} -> not is_nil(value) end)
end
def get_valid_flags(flags, model) do
flags
|> Enum.filter(fn flag ->
model
|> then(fn model ->
Map.has_key?(model, flag) and model |> Map.fetch!(flag)
end)
end)
|> Enum.map(fn flag ->
"--#{flag |> Atom.to_string() |> String.replace("_", "-")}"
end)
end
def get_valid_named_arguments(named_arguments, model) do
named_arguments
|> Enum.filter(fn named_argument ->
model |> Map.has_key?(named_argument)
end)
|> Enum.map(fn named_argument ->
[
"--#{named_argument |> Atom.to_string() |> String.replace("_", "-")}",
model
|> Map.fetch!(named_argument)
|> then(fn named_argument_value ->
case is_atom(named_argument_value) do
true -> Atom.to_string(named_argument_value)
_ -> named_argument_value
end
end)
]
end)
end
def get_valid_positional_arguments(positional_arguments, model) do
positional_arguments
|> Enum.filter(fn positional_argument ->
model |> Map.has_key?(positional_argument)
end)
|> Enum.map(fn positional_argument ->
model |> Map.fetch!(positional_argument)
end)
end
def get_valid_model!(model, positional_arguments, flags, named_arguments) do
filtered_model =
model
|> filter_model()
valid_positional_arguments =
positional_arguments
|> get_valid_positional_arguments(filtered_model)
valid_flags =
flags
|> get_valid_flags(filtered_model)
valid_named_arguments =
named_arguments
|> get_valid_named_arguments(filtered_model)
[
valid_positional_arguments,
valid_flags,
valid_named_arguments,
filtered_model
]
end
end