Current section

Files

Jump to
clean_mixer lib clean_mixer.ex
Raw

lib/clean_mixer.ex

defmodule CleanMixer do
alias CleanMixer.Config
alias CleanMixer.Project
alias CleanMixer.ArchMap
alias CleanMixer.ArchGraph
alias CleanMixer.ArchMap.Component
alias CleanMixer.ArchMap.Dependency
@spec arch_map() :: ArchMap.t()
def arch_map() do
Config.load()
|> Project.new()
|> get_arch_map()
end
@spec component_cycles(ArchMap.t()) :: [ArchGraph.cycle()]
def component_cycles(arch_map) do
arch_map
|> ArchGraph.build_from()
|> ArchGraph.cycles()
end
@spec component(Component.name(), ArchMap.t()) :: Component.t() | nil
def component(name, arch_map) do
ArchMap.component(arch_map, name)
end
@spec dependencies_of(Component.t(), ArchMap.t()) :: list(Dependency.t())
def dependencies_of(comp, arch_map) do
ArchMap.dependencies_of(arch_map, comp)
end
@spec dependency?(Component.t(), Component.t(), ArchMap.t()) :: boolean
def dependency?(comp, target_comp, arch_map) do
deps = dependencies_of(comp, arch_map) |> Enum.map(& &1.target)
target_comp in deps
end
defp get_arch_map(%Project{arch_map: arch_map}), do: arch_map
@moduledoc false
@spec path_to_asset(Path.t()) :: Path.t()
def path_to_asset(path) do
:code.priv_dir(:clean_mixer) |> Path.join(path)
end
end