lib/toolbox/utils/path.ex
defmodule Toolbox.Utils.Path do
@moduledoc """
Utilities for handling configured paths.
"""
@doc """
Resolves a possibly relative path to absolute path by prepending the Altworx
root dir (see `set_altworx_root/1`).
## Examples
iex> Path.set_altworx_root("/opt/altworx")
:ok
iex> Path.resolve_path("/already/absolute/path")
"/already/absolute/path"
iex> Path.resolve_path("some/../relative/path")
"/opt/altworx/relative/path"
"""
def resolve_path("/" <> _ = path) do
path
end
def resolve_path(path) when is_binary(path) do
Path.expand(Path.join(get_altworx_root(), path))
end
@doc """
Sets where the Altworx root dir is. Configuration and data dirs are supposed
to be relative to the root dir. It is typically the directory which the VM is
started in.
"""
@spec set_altworx_root(String.t()) :: :ok
def set_altworx_root(path) when is_binary(path) do
Application.put_env(:toolbox, :altworx_root_dir, path)
end
@doc """
Gets the Altworx root dir.
"""
@spec get_altworx_root :: String.t()
def get_altworx_root do
Application.get_env(:toolbox, :altworx_root_dir)
end
end