Current section
Files
Jump to
Current section
Files
lib/ui/list_task.ex
defmodule CleanMixer.UI.ListTask do
alias CleanMixer.ArchMap.Filter
alias CleanMixer.UI.ArchMapRendering.TextRenderer
alias CleanMixer.UI.CLI
@spec run(list(String.t()), TextRenderer.t()) :: :ok
def run(args, renderer, extra_cli_desc \\ []) do
Mix.Task.run("compile")
params = parse_params(args, extra_cli_desc)
CleanMixer.arch_map()
|> filter_arch_map(params)
|> renderer.render(params)
|> IO.puts()
:ok
end
defp filter_arch_map(arch_map, params) do
Enum.reduce(params, arch_map, &filter/2)
end
defp filter({:sources, [_ | _] = sources}, arch_map) do
Filter.with_source_components(arch_map, sources)
end
defp filter({:targets, [_ | _] = targets}, arch_map) do
Filter.with_target_components(arch_map, targets)
end
defp filter({:file_sources, [_ | _] = sources}, arch_map) do
Filter.with_file_sources(arch_map, sources)
end
defp filter({:file_targets, [_ | _] = targets}, arch_map) do
Filter.with_file_targets(arch_map, targets)
end
defp filter(_, arch_map) do
arch_map
end
defp parse_params(args, extra_cli_desc) do
CLI.parse_params(args, cli_description(extra_cli_desc))
end
defp cli_description(extra_cli_desc) do
[
name: extra_cli_desc[:name],
description: extra_cli_desc[:description],
parse_double_dash: true,
options:
[
sources: [
value_name: "SOURCES",
short: "-s",
long: "--sources",
help: "filter by deps sources",
parser: &array/1,
default: [],
required: false
],
targets: [
value_name: "TARGETS",
short: "-t",
long: "--targets",
help: "filter by deps targets",
parser: &array/1,
default: [],
required: false
],
file_sources: [
value_name: "FILE_SOURCES",
long: "--file-sources",
help: "filter by deps file sources",
parser: &array/1,
default: [],
required: false
],
file_targets: [
value_name: "FILE_TARGETS",
long: "--file-targets",
help: "filter by deps file targets",
parser: &array/1,
default: [],
required: false
]
] ++ Keyword.get(extra_cli_desc, :options, []),
flags: Keyword.get(extra_cli_desc, :flags, [])
]
end
defp array(string) do
{:ok, String.split(string, ",")}
end
end