2024-06-22 11:09:35 +12:00
|
|
|
defmodule Mix.Tasks.Ash.Gen.Domain do
|
2024-07-27 05:43:51 +12:00
|
|
|
@example "mix ash.gen.domain MyApp.Accounts"
|
2024-06-22 11:09:35 +12:00
|
|
|
@moduledoc """
|
|
|
|
Generates an Ash.Domain
|
|
|
|
|
2024-07-09 09:15:52 +12:00
|
|
|
## Example
|
|
|
|
|
|
|
|
```bash
|
2024-07-27 05:43:51 +12:00
|
|
|
#{@example}
|
2024-07-09 09:15:52 +12:00
|
|
|
```
|
2024-06-22 11:09:35 +12:00
|
|
|
"""
|
|
|
|
|
|
|
|
@shortdoc "Generates an Ash.Domain"
|
|
|
|
use Igniter.Mix.Task
|
|
|
|
|
|
|
|
@impl Igniter.Mix.Task
|
2024-07-27 05:43:51 +12:00
|
|
|
def info(_argv, _parent) do
|
|
|
|
%Igniter.Mix.Task.Info{
|
|
|
|
positional: [:domain],
|
|
|
|
example: @example
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
@impl Igniter.Mix.Task
|
|
|
|
def igniter(igniter, argv) do
|
|
|
|
{%{domain: domain}, argv} = positional_args!(argv)
|
2024-07-30 22:45:24 +12:00
|
|
|
domain = Igniter.Code.Module.parse(domain)
|
|
|
|
|
2024-09-14 10:55:24 +12:00
|
|
|
domain_file = Igniter.Project.Module.proper_location(igniter, domain)
|
2024-06-22 11:09:35 +12:00
|
|
|
|
2024-09-11 05:24:56 +12:00
|
|
|
app_name = Igniter.Project.Application.app_name(igniter)
|
2024-06-22 11:09:35 +12:00
|
|
|
|
|
|
|
if "--ignore-if-exists" in argv && Igniter.exists?(igniter, domain_file) do
|
|
|
|
igniter
|
|
|
|
else
|
|
|
|
igniter
|
2024-08-09 01:18:03 +12:00
|
|
|
|> Igniter.create_new_file(domain_file, """
|
2024-06-22 11:09:35 +12:00
|
|
|
defmodule #{inspect(domain)} do
|
|
|
|
use Ash.Domain
|
|
|
|
|
|
|
|
resources do
|
|
|
|
end
|
|
|
|
end
|
|
|
|
""")
|
|
|
|
|> Igniter.Project.Config.configure(
|
|
|
|
"config.exs",
|
|
|
|
app_name,
|
|
|
|
[:ash_domains],
|
|
|
|
[domain],
|
|
|
|
updater: fn list ->
|
|
|
|
Igniter.Code.List.prepend_new_to_list(
|
|
|
|
list,
|
|
|
|
domain
|
|
|
|
)
|
|
|
|
end
|
|
|
|
)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|