diff --git a/lib/igniter/libs/phoenix.ex b/lib/igniter/libs/phoenix.ex index c784679..852d610 100644 --- a/lib/igniter/libs/phoenix.ex +++ b/lib/igniter/libs/phoenix.ex @@ -7,7 +7,7 @@ defmodule Igniter.Libs.Phoenix do @spec web_module_name() :: module() @deprecated "Use `web_module/0` instead." def web_module_name do - Module.concat([inspect(Igniter.Project.Module.module_name_prefix(Igniter.new())) <> "Web"]) + web_module(Igniter.new()) end @doc """ @@ -15,7 +15,16 @@ defmodule Igniter.Libs.Phoenix do """ @spec web_module(Igniter.t()) :: module() def web_module(igniter) do - Module.concat([inspect(Igniter.Project.Module.module_name_prefix(igniter)) <> "Web"]) + prefix = + igniter + |> Igniter.Project.Module.module_name_prefix() + |> inspect() + + if String.ends_with?(prefix, "Web") do + Module.concat([prefix]) + else + Module.concat([prefix <> "Web"]) + end end @doc "Returns `true` if the module is a Phoenix HTML module" @@ -66,10 +75,7 @@ defmodule Igniter.Libs.Phoenix do @spec web_module_name(String.t()) :: module() @deprecated "Use `web_module_name/2` instead." def web_module_name(suffix) do - Module.concat( - inspect(Igniter.Project.Module.module_name_prefix(Igniter.new())) <> "Web", - suffix - ) + Module.concat(web_module(Igniter.new()), suffix) end @doc """ @@ -77,7 +83,7 @@ defmodule Igniter.Libs.Phoenix do """ @spec web_module_name(Igniter.t(), String.t()) :: module() def web_module_name(igniter, suffix) do - Module.concat(inspect(Igniter.Project.Module.module_name_prefix(igniter)) <> "Web", suffix) + Module.concat(web_module(igniter), suffix) end @doc "Gets the list of endpoints that use a given router" @@ -555,7 +561,7 @@ defmodule Igniter.Libs.Phoenix do end) end - @doc "Moves to the use statement in a module that matches `use TheirWebModule, :router`" + @doc "Moves to the use statement in a module that matches `use TheirAppWeb, :router`" @spec move_to_router_use(Igniter.t(), Sourceror.Zipper.t()) :: :error | {:ok, Sourceror.Zipper.t()} def move_to_router_use(igniter, zipper) do @@ -564,7 +570,7 @@ defmodule Igniter.Libs.Phoenix do Igniter.Code.Function.argument_equals?( zipper, 0, - router_using(igniter) + web_module(igniter) ) && Igniter.Code.Function.argument_equals?( zipper, @@ -628,10 +634,6 @@ defmodule Igniter.Libs.Phoenix do end end - defp router_using(igniter) do - Module.concat([to_string(Igniter.Project.Module.module_name_prefix(igniter)) <> "Web"]) - end - defp using_a_webbish_module?(zipper) do case Igniter.Code.Function.move_to_nth_argument(zipper, 0) do {:ok, zipper} -> diff --git a/test/igniter/libs/phoenix_test.exs b/test/igniter/libs/phoenix_test.exs index 3b5bebc..a1c2e58 100644 --- a/test/igniter/libs/phoenix_test.exs +++ b/test/igniter/libs/phoenix_test.exs @@ -24,4 +24,46 @@ defmodule Igniter.Libs.PhoenixTest do refute Igniter.Libs.Phoenix.controller?(igniter, TestWeb.ThingView) end end + + describe "web_module/1" do + test "append Web" do + mix_exs = """ + defmodule Test.MixProject do + end + """ + + igniter = + assert test_project() + |> Igniter.create_or_update_elixir_file( + "mix.exs", + mix_exs, + &{:ok, Igniter.Code.Common.replace_code(&1, mix_exs)} + ) + |> apply_igniter!() + + assert Igniter.Libs.Phoenix.web_module(igniter) == TestWeb + end + + test "do not append Web suffix if name already ends with Web" do + mix_exs = """ + defmodule TestWeb.MixProject do + end + """ + + igniter = + assert test_project() + |> Igniter.create_or_update_elixir_file( + "mix.exs", + mix_exs, + &{:ok, Igniter.Code.Common.replace_code(&1, mix_exs)} + ) + |> apply_igniter!() + + assert Igniter.Libs.Phoenix.web_module(igniter) == TestWeb + end + end + + test "web_module_name/1" do + assert Igniter.Libs.Phoenix.web_module_name(test_project(), "Suffix") == TestWeb.Suffix + end end diff --git a/test/igniter/project/module_test.exs b/test/igniter/project/module_test.exs new file mode 100644 index 0000000..83e3246 --- /dev/null +++ b/test/igniter/project/module_test.exs @@ -0,0 +1,8 @@ +defmodule Igniter.Project.ModuleTest do + use ExUnit.Case + import Igniter.Test + + test "module_name_prefix/1" do + assert Igniter.Project.Module.module_name_prefix(test_project()) == Test + end +end