defmodule Dragon.Scss.Evaluate do
@moduledoc """
Render SCSS
"""
use Dragon.Context
import Dragon.Tools.File
def all(%Dragon{files: %{scss: l}} = d), do: all(d, Map.keys(l) |> Enum.sort())
def all(d), do: {:ok, d}
def all(%Dragon{} = d, [file | rest]) do
with {:ok, path} <- find_file(d.root, file) do
stdout([:green, "SCSS ", :reset, :bright, file])
## TODO: Make a runtime argument for adding this — this will minify
## the CSS after its run. During a separate stage perhaps
# Sass.compile_file(path, %{output_style: Sass.sass_style_compressed})
case Sass.compile_file(path) do
{:ok, content} ->
build_path = Path.join(d.build, drop_root(d.root, Path.rootname(path) <> ".css"))
stderr([:light_black, "✓ Saving ", :reset, drop_root(d.root, build_path)])
write_file(build_path, content)
{:error, reason} ->
error("Error processing #{path}\n")
stderr([reason])
abort("Cannot continue")
end
all(d, rest)
end
end
def all(%Dragon{} = d, _), do: {:ok, d}
end