diff --git a/lib/mix/tasks/gen/ash.gen.domain.ex b/lib/mix/tasks/gen/ash.gen.domain.ex index 424a2b9a..de3c79fb 100644 --- a/lib/mix/tasks/gen/ash.gen.domain.ex +++ b/lib/mix/tasks/gen/ash.gen.domain.ex @@ -1,11 +1,12 @@ defmodule Mix.Tasks.Ash.Gen.Domain do + @example "mix ash.gen.domain MyApp.Accounts" @moduledoc """ Generates an Ash.Domain ## Example ```bash - mix ash.gen.domain MyApp.Accounts + #{@example} ``` """ @@ -13,8 +14,16 @@ defmodule Mix.Tasks.Ash.Gen.Domain do use Igniter.Mix.Task @impl Igniter.Mix.Task - def igniter(igniter, [domain | argv]) do - domain = Igniter.Code.Module.parse(domain) + 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) domain_file = Igniter.Code.Module.proper_location(domain) app_name = Igniter.Project.Application.app_name() diff --git a/lib/mix/tasks/gen/ash.gen.enum.ex b/lib/mix/tasks/gen/ash.gen.enum.ex index df4a204f..292dbcfc 100644 --- a/lib/mix/tasks/gen/ash.gen.enum.ex +++ b/lib/mix/tasks/gen/ash.gen.enum.ex @@ -1,11 +1,12 @@ defmodule Mix.Tasks.Ash.Gen.Enum do + @example "mix ash.gen.enum MyApp.Support.Ticket.Types.Status open,closed --short-name ticket_status" @moduledoc """ Generates an Ash.Type.Enum ## Example ```bash - mix ash.gen.enum MyApp.Support.Ticket.Types.Status open,closed --short-name ticket_status + #{@example} ``` ## Options @@ -22,6 +23,8 @@ defmodule Mix.Tasks.Ash.Gen.Enum do schema: [ short_name: :string ], + example: @example, + positional: [:module_name, :types], aliases: [ s: :short_name ] @@ -29,7 +32,9 @@ defmodule Mix.Tasks.Ash.Gen.Enum do end @impl Igniter.Mix.Task - def igniter(igniter, [module_name, types | argv]) do + def igniter(igniter, argv) do + {%{module_name: module_name, types: types}, argv} = positional_args!(argv) + enum = Igniter.Code.Module.parse(module_name) file_name = Igniter.Code.Module.proper_location(enum) diff --git a/lib/mix/tasks/gen/ash.gen.resource.ex b/lib/mix/tasks/gen/ash.gen.resource.ex index e70ed5dd..39e8f629 100644 --- a/lib/mix/tasks/gen/ash.gen.resource.ex +++ b/lib/mix/tasks/gen/ash.gen.resource.ex @@ -1,4 +1,12 @@ defmodule Mix.Tasks.Ash.Gen.Resource do + @example """ + mix ash.gen.resource Helpdesk.Support.Ticket \\ + --default-actions read \\ + --uuid-primary-key id \\ + --attribute subject:string:required:public \\ + --relationship belongs_to:representative:Helpdesk.Support.Representative \\ + --extend postgres,graphql + """ @moduledoc """ Generate and configure an Ash.Resource. @@ -7,12 +15,7 @@ defmodule Mix.Tasks.Ash.Gen.Resource do ## Example ```bash - mix ash.gen.resource Helpdesk.Support.Ticket \ - --default-actions read \ - --uuid-primary-key id \ - --attribute subject:string:required:public \ - --relationship belongs_to:representative:Helpdesk.Support.Representative \ - --extend postgres,graphql + #{@example} ``` ## Options @@ -33,6 +36,8 @@ defmodule Mix.Tasks.Ash.Gen.Resource do @impl Igniter.Mix.Task def info(_argv, _parent) do %Igniter.Mix.Task.Info{ + positional: [:resource], + example: @example, schema: [ attribute: :keep, relationship: :keep, @@ -57,7 +62,8 @@ defmodule Mix.Tasks.Ash.Gen.Resource do end @impl Igniter.Mix.Task - def igniter(igniter, [resource | argv]) do + def igniter(igniter, argv) do + {%{resource: resource}, argv} = positional_args!(argv) resource = Igniter.Code.Module.parse(resource) app_name = Igniter.Project.Application.app_name() diff --git a/mix.exs b/mix.exs index ff46de4e..4880e4e6 100644 --- a/mix.exs +++ b/mix.exs @@ -361,7 +361,7 @@ defmodule Ash.MixProject do {:simple_sat, "~> 0.1 and >= 0.1.1", optional: true}, # Code Generators - {:igniter, "~> 0.2 and >= 0.2.12"}, + {:igniter, "~> 0.3 and >= 0.3.10"}, # Dev/Test dependencies {:eflame, "~> 1.0", only: [:dev, :test]}, diff --git a/mix.lock b/mix.lock index 910af957..2758d72c 100644 --- a/mix.lock +++ b/mix.lock @@ -19,7 +19,7 @@ "git_cli": {:hex, :git_cli, "0.3.0", "a5422f9b95c99483385b976f5d43f7e8233283a47cda13533d7c16131cb14df5", [:mix], [], "hexpm", "78cb952f4c86a41f4d3511f1d3ecb28edb268e3a7df278de2faa1bd4672eaf9b"}, "git_ops": {:hex, :git_ops, "2.6.1", "cc7799a68c26cf814d6d1a5121415b4f5bf813de200908f930b27a2f1fe9dad5", [:mix], [{:git_cli, "~> 0.2", [hex: :git_cli, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "ce62d07e41fe993ec22c35d5edb11cf333a21ddaead6f5d9868fcb607d42039e"}, "glob_ex": {:hex, :glob_ex, "0.1.7", "eae6b6377147fb712ac45b360e6dbba00346689a87f996672fe07e97d70597b1", [:mix], [], "hexpm", "decc1c21c0c73df3c9c994412716345c1692477b9470e337f628a7e08da0da6a"}, - "igniter": {:hex, :igniter, "0.3.9", "2a3c80e3d5a0f3758670eaa7658fe6334633dab3fd9bca9aae69802f8282a0b3", [:mix], [{:glob_ex, "~> 0.1.7", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:inflex, "~> 2.0", [hex: :inflex, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:owl, "~> 0.9", [hex: :owl, repo: "hexpm", optional: false]}, {:rewrite, "~> 0.9", [hex: :rewrite, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.4", [hex: :sourceror, repo: "hexpm", optional: false]}, {:spitfire, ">= 0.1.3 and < 1.0.0-0", [hex: :spitfire, repo: "hexpm", optional: false]}, {:ucwidth, "~> 0.2", [hex: :ucwidth, repo: "hexpm", optional: false]}], "hexpm", "2a5b8618a0aef8e5a545d05d389ba20fc5b0b4b8a6c45cf4f900890c263c7fdc"}, + "igniter": {:hex, :igniter, "0.3.10", "b264ed66d14f52d8fabbf5cdbcc65ce57ee35cca120066dd24f530dcc943dd48", [:mix], [{:glob_ex, "~> 0.1.7", [hex: :glob_ex, repo: "hexpm", optional: false]}, {:inflex, "~> 2.0", [hex: :inflex, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:owl, "~> 0.9", [hex: :owl, repo: "hexpm", optional: false]}, {:rewrite, "~> 0.9", [hex: :rewrite, repo: "hexpm", optional: false]}, {:sourceror, "~> 1.4", [hex: :sourceror, repo: "hexpm", optional: false]}, {:spitfire, ">= 0.1.3 and < 1.0.0-0", [hex: :spitfire, repo: "hexpm", optional: false]}, {:ucwidth, "~> 0.2", [hex: :ucwidth, repo: "hexpm", optional: false]}], "hexpm", "8cbf5397296cd4d3dcbd7977e8f760190321ceff1d7d393a7bcad373c46f2626"}, "inflex": {:hex, :inflex, "2.1.0", "a365cf0821a9dacb65067abd95008ca1b0bb7dcdd85ae59965deef2aa062924c", [:mix], [], "hexpm", "14c17d05db4ee9b6d319b0bff1bdf22aa389a25398d1952c7a0b5f3d93162dd8"}, "iterex": {:hex, :iterex, "0.1.1", "90378a9561ad87da46737dceaf02e68a0b3023746216a4de34a0c509f5f505d4", [:mix], [], "hexpm", "c4f5916a6dbb03aa4c3d5c480069e13075ca6a57bd0c28d643da3891962440ad"}, "jason": {:hex, :jason, "1.4.3", "d3f984eeb96fe53b85d20e0b049f03e57d075b5acda3ac8d465c969a2536c17b", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "9a90e868927f7c777689baa16d86f4d0e086d968db5c05d917ccff6d443e58a3"},