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
@doc false
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 file,
--config-template option shows config template
"""
|> FileWatch.highlight()
|> Mix.raise()
else
wrapper_file_path = Path.join(assets_dir_path, Assets.wrapper_file_name())
FileWatch.run_impl(wrapper_file_path)
end
{[config_template: true], [], []} ->
show_config_template(assets_dir_path)
_ ->
help()
end
end
defp help(), do: @moduledoc |> FileWatch.highlight() |> IO.puts()
defp show_config_template(assets_dir_path) do
"#{Path.join(assets_dir_path, "config.exs") |> File.read!()}"
|> FileWatch.highlight()
|> IO.puts()
end
end