Skip to main content

lib/mix/tasks/jido_evolve.install.ex

defmodule Mix.Tasks.JidoEvolve.Install.Docs do
  @moduledoc false

  @doc "Short task description."
  @spec short_doc() :: String.t()
  def short_doc do
    "Install and configure Jido.Evolve for use in an application."
  end

  @doc "Task usage example."
  @spec example() :: String.t()
  def example do
    "mix jido_evolve.install"
  end

  @doc "Long-form task documentation."
  @spec long_doc() :: String.t()
  def long_doc do
    """
    #{short_doc()}

    ## Example

    ```sh
    #{example()}
    ```
    """
  end
end

if Code.ensure_loaded?(Igniter) do
  defmodule Mix.Tasks.JidoEvolve.Install do
    @shortdoc "#{__MODULE__.Docs.short_doc()}"

    @moduledoc __MODULE__.Docs.long_doc()

    use Igniter.Mix.Task

    @impl Igniter.Mix.Task
    def info(_argv, _composing_task) do
      %Igniter.Mix.Task.Info{
        group: :jido_evolve,
        adds_deps: [],
        installs: [],
        example: __MODULE__.Docs.example(),
        only: nil,
        positional: [],
        composes: [],
        schema: [],
        defaults: [],
        aliases: [],
        required: []
      }
    end

    @impl Igniter.Mix.Task
    def igniter(igniter) do
      igniter
      |> Igniter.add_notice("""
      Jido.Evolve installed successfully.

      Next steps:
      - Read: https://hexdocs.pm/jido_evolve/readme.html
      - Start with: Jido.Evolve.evolve/1
      """)
    end
  end
else
  defmodule Mix.Tasks.JidoEvolve.Install do
    @shortdoc "#{__MODULE__.Docs.short_doc()} | Install `igniter` to use"

    @moduledoc __MODULE__.Docs.long_doc()

    use Mix.Task

    @impl Mix.Task
    def run(_argv) do
      Mix.shell().error("""
      The task 'jido_evolve.install' requires igniter. Please install igniter and try again.

      For more information, see: https://hexdocs.pm/igniter/readme.html#installation
      """)

      exit({:shutdown, 1})
    end
  end
end