From 89f2d00d1f8ce3f4d8e4a6b409ab751383e00834 Mon Sep 17 00:00:00 2001 From: Frank Dugan III Date: Wed, 26 Mar 2025 22:07:55 -0500 Subject: [PATCH 1/2] feat: add igniter.add task --- lib/mix/tasks/igniter.add.ex | 39 +++++++++++++++++++++++++++++ test/mix/tasks/igniter.add_test.exs | 14 +++++++++++ 2 files changed, 53 insertions(+) create mode 100644 lib/mix/tasks/igniter.add.ex create mode 100644 test/mix/tasks/igniter.add_test.exs diff --git a/lib/mix/tasks/igniter.add.ex b/lib/mix/tasks/igniter.add.ex new file mode 100644 index 00000000..4a0c2728 --- /dev/null +++ b/lib/mix/tasks/igniter.add.ex @@ -0,0 +1,39 @@ +defmodule Mix.Tasks.Igniter.Add do + use Igniter.Mix.Task + + @example "mix igniter.add dep1 dep2" + + @shortdoc "Adds the provided deps to `mix.exs`" + @moduledoc """ + #{@shortdoc} + + This is only useful when you want to add a dependency without running its installer, since `igniter.install` already adds the dependency to `mix.exs`. + + This task also gets the dependencies after completion. + + ## Example + + ```bash + #{@example} + ``` + """ + + @impl Igniter.Mix.Task + def info(_argv, _composing_task) do + %Igniter.Mix.Task.Info{ + positional: [deps: [rest: true]] + } + end + + @impl Igniter.Mix.Task + def igniter(igniter) do + igniter.args.positional.deps + |> Enum.join(",") + |> String.split(",") + |> Enum.map(&String.to_atom/1) + |> Enum.reduce(igniter, fn name, igniter -> + Igniter.Project.Deps.add_dep(igniter, {name, ">= 0.0.0"}) + end) + |> Igniter.add_task("deps.get") + end +end diff --git a/test/mix/tasks/igniter.add_test.exs b/test/mix/tasks/igniter.add_test.exs new file mode 100644 index 00000000..a8872ebe --- /dev/null +++ b/test/mix/tasks/igniter.add_test.exs @@ -0,0 +1,14 @@ +defmodule Mix.Tasks.Igniter.AddTest do + use ExUnit.Case + import Igniter.Test + + test "adds dependencies" do + test_project() + |> apply_igniter!() + |> Igniter.compose_task("igniter.add", ["req"]) + |> assert_has_patch("mix.exs", """ + + | {:req, ">= 0.0.0"} + """) + |> assert_has_task("deps.get", []) + end +end From b582b2643c193332d42dacd972f6fb426380c6a0 Mon Sep 17 00:00:00 2001 From: Frank Dugan III Date: Wed, 26 Mar 2025 22:36:13 -0500 Subject: [PATCH 2/2] refactor: use determine_dep_type_and_version/1 to get proper version --- lib/mix/tasks/igniter.add.ex | 11 ++++++++--- test/mix/tasks/igniter.add_test.exs | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/mix/tasks/igniter.add.ex b/lib/mix/tasks/igniter.add.ex index 4a0c2728..7801df03 100644 --- a/lib/mix/tasks/igniter.add.ex +++ b/lib/mix/tasks/igniter.add.ex @@ -30,9 +30,14 @@ defmodule Mix.Tasks.Igniter.Add do igniter.args.positional.deps |> Enum.join(",") |> String.split(",") - |> Enum.map(&String.to_atom/1) - |> Enum.reduce(igniter, fn name, igniter -> - Igniter.Project.Deps.add_dep(igniter, {name, ">= 0.0.0"}) + |> Enum.reduce(igniter, fn dep, igniter -> + case Igniter.Project.Deps.determine_dep_type_and_version(dep) do + {name, version} -> + Igniter.Project.Deps.add_dep(igniter, {name, version}) + + :error -> + raise "Could not determine source for requested package #{dep}" + end end) |> Igniter.add_task("deps.get") end diff --git a/test/mix/tasks/igniter.add_test.exs b/test/mix/tasks/igniter.add_test.exs index a8872ebe..d853e97c 100644 --- a/test/mix/tasks/igniter.add_test.exs +++ b/test/mix/tasks/igniter.add_test.exs @@ -7,7 +7,7 @@ defmodule Mix.Tasks.Igniter.AddTest do |> apply_igniter!() |> Igniter.compose_task("igniter.add", ["req"]) |> assert_has_patch("mix.exs", """ - + | {:req, ">= 0.0.0"} + + | {:req, """) |> assert_has_task("deps.get", []) end