sloane.sh/lib/sloane_sh/config.ex

41 lines
873 B
Elixir
Raw Normal View History

2024-02-16 22:28:13 -05:00
defmodule SloaneSH.Config do
@moduledoc """
SloaneSH configuration
"""
use TypedStruct
alias __MODULE__
typedstruct do
field :pages_dir, String.t(), enforce: true
field :posts_dir, String.t(), enforce: true
field :output, String.t(), enforce: true
end
def default do
priv = :code.priv_dir(:sloane_sh) |> resolve_link()
%Config{
pages_dir: Path.join(priv, "site/pages"),
posts_dir: Path.join(priv, "site/posts"),
output: Path.join(priv, "output")
}
end
def in_config?(%Config{} = cfg, path) do
Enum.any?([cfg.pages_dir, cfg.posts_dir], &String.starts_with?(path, &1)) and
Path.extname(path) == ".md"
end
defp resolve_link(path) do
case File.read_link(path) do
{:ok, link} ->
dir = Path.dirname(path)
Path.expand(link, dir)
_ ->
path
end
end
end