Current section

Files

Jump to
ash_json_api lib mix tasks ash_json_api.install.ex
Raw

lib/mix/tasks/ash_json_api.install.ex

if Code.ensure_loaded?(Igniter) do
defmodule Mix.Tasks.AshJsonApi.Install do
@moduledoc "Installs AshJsonApi. Should be run with `mix igniter.install ash_json_api`"
@shortdoc @moduledoc
require Igniter.Code.Common
use Igniter.Mix.Task
def info(_argv, _parent) do
%Igniter.Mix.Task.Info{
adds_deps: [{:open_api_spex, "~> 3.0"}]
}
end
def igniter(igniter) do
ash_phoenix_router_name = Igniter.Libs.Phoenix.web_module_name(igniter, "AshJsonApiRouter")
igniter =
igniter
|> Igniter.Project.Formatter.import_dep(:ash_json_api)
|> Spark.Igniter.prepend_to_section_order(:"Ash.Resource", [:json_api])
|> Spark.Igniter.prepend_to_section_order(:"Ash.Domain", [:json_api])
{igniter, candidate_ash_json_api_routers} =
AshJsonApi.Igniter.ash_json_api_routers(igniter)
if Enum.empty?(candidate_ash_json_api_routers) do
igniter
# Remove in 2.0
|> Igniter.Project.Config.configure(
"config.exs",
:ash_json_api,
[:show_public_calculations_when_loaded?],
false
)
|> Igniter.Project.Config.configure(
"config.exs",
:ash_json_api,
[:authorize_update_destroy_with_error?],
true
)
|> AshJsonApi.Igniter.setup_ash_json_api_router(ash_phoenix_router_name)
|> AshJsonApi.Igniter.setup_phoenix(ash_phoenix_router_name)
|> AshJsonApi.Igniter.setup_routes_alias()
else
igniter
|> Igniter.add_warning("AshJsonApi router already exists, skipping installation.")
end
end
end
else
defmodule Mix.Tasks.AshJsonApi.Install do
@moduledoc "Installs AshJsonApi. Should be run with `mix igniter.install ash_json_api`"
@shortdoc @moduledoc
use Mix.Task
def run(_argv) do
Mix.shell().error("""
The task 'ash_json_api.install' requires igniter to be run.
Please install igniter and try again.
For more information, see: https://hexdocs.pm/igniter
""")
exit({:shutdown, 1})
end
end
end