2024-05-28 15:30:41 +12:00
|
|
|
defmodule Igniter.Mix.Task do
|
2024-06-01 14:59:36 +12:00
|
|
|
@moduledoc "A behaviour for implementing a Mix task that is enriched to be composable with other Igniter tasks."
|
2024-05-28 15:30:41 +12:00
|
|
|
@callback supports_umbrella?() :: boolean()
|
|
|
|
@callback igniter(igniter :: Igniter.t(), argv :: list(String.t())) :: Igniter.t()
|
|
|
|
|
|
|
|
defmacro __using__(_opts) do
|
|
|
|
quote do
|
|
|
|
use Mix.Task
|
|
|
|
@behaviour Igniter.Mix.Task
|
|
|
|
|
|
|
|
def run(argv) do
|
|
|
|
if !supports_umbrella?() && Mix.Project.umbrella?() do
|
|
|
|
raise """
|
|
|
|
Cannot run #{inspect(__MODULE__)} in an umbrella project.
|
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
|
|
|
Application.ensure_all_started([:rewrite])
|
|
|
|
|
|
|
|
Igniter.new()
|
|
|
|
|> igniter(argv)
|
2024-06-01 14:59:36 +12:00
|
|
|
|> Igniter.do_or_dry_run(argv)
|
2024-05-28 15:30:41 +12:00
|
|
|
end
|
|
|
|
|
|
|
|
def supports_umbrella?, do: false
|
|
|
|
|
|
|
|
defoverridable supports_umbrella?: 0
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|