defmodule Mix.Tasks.File.Watch do
@shortdoc FileWatch.MixProject.description()
@moduledoc """
#{@shortdoc} v#{FileWatch.MixProject.version()}
### Show config template
configuration details are described in it.
$ mix file.watch --config-template
### start watch
$ mix file.watch
"""
use Mix.Task
alias FileWatch.Assets
def run(args) do
assets_dir_path = Application.app_dir(:file_watch, ["priv"])
case OptionParser.parse(args, strict: [config_template: :boolean]) do
{[], [], []} ->
config = Application.get_all_env(:file_watch)
if config == [] do
"""
:file_watch config doesn't exist in config.exs
--config-template option shows configuration template
"""
|> FileWatch.highlight()
|> Mix.raise()
else
wrapper_file_path = Path.join(assets_dir_path, Assets.wrapper_file_name())
FileWatch.run_impl(config, wrapper_file_path)
end
{[config_template: true], [], []} ->
"#{Path.join(assets_dir_path, "config.exs") |> File.read!()}"
|> FileWatch.highlight()
|> IO.puts()
_ ->
help()
end
end
defp help(), do: @moduledoc |> FileWatch.highlight() |> IO.puts()
end