Skip to content

Commit 6153ea0

Browse files
feat: Add support for SiteEncrypt.Phoenix.Endpoint detection (#339)
Enhanced endpoint detection functions to support SiteEncrypt.Phoenix.Endpoint in addition to Phoenix.Endpoint. This allows Igniter to work with projects that use SiteEncrypt for automatic SSL certificate management. Changes: - Updated select_endpoint/3 to detect both Phoenix.Endpoint and SiteEncrypt.Phoenix.Endpoint - Updated endpoints_for_router/2 to detect both endpoint types - Added comprehensive tests for SiteEncrypt.Phoenix.Endpoint support
1 parent 435cde1 commit 6153ea0

2 files changed

Lines changed: 114 additions & 7 deletions

File tree

lib/igniter/libs/phoenix.ex

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
defmodule Igniter.Libs.Phoenix do
66
@moduledoc "Codemods & utilities for working with Phoenix"
77

8+
@endpoint_modules [Phoenix.Endpoint, SiteEncrypt.Phoenix.Endpoint]
9+
810
@doc """
911
Returns the web module name for the current app
1012
"""
@@ -95,18 +97,23 @@ defmodule Igniter.Libs.Phoenix do
9597
{Igniter.t(), list(module())}
9698
def endpoints_for_router(igniter, router) do
9799
Igniter.Project.Module.find_all_matching_modules(igniter, fn _module, zipper ->
98-
with {:ok, _} <- Igniter.Code.Module.move_to_use(zipper, Phoenix.Endpoint),
99-
{:ok, _} <-
100-
Igniter.Code.Function.move_to_function_call_in_current_scope(
100+
uses_endpoint? =
101+
Enum.find_value(@endpoint_modules, fn endpoint_module ->
102+
Igniter.Code.Module.move_to_use(zipper, endpoint_module) != :error
103+
end)
104+
105+
if uses_endpoint? do
106+
case Igniter.Code.Function.move_to_function_call_in_current_scope(
101107
zipper,
102108
:plug,
103109
[1, 2],
104110
&Igniter.Code.Function.argument_equals?(&1, 0, router)
105111
) do
106-
true
112+
{:ok, _} -> true
113+
_ -> false
114+
end
107115
else
108-
_ ->
109-
false
116+
false
110117
end
111118
end)
112119
end
@@ -134,7 +141,9 @@ defmodule Igniter.Libs.Phoenix do
134141
else
135142
{igniter, endpoints} =
136143
Igniter.Project.Module.find_all_matching_modules(igniter, fn _mod, zipper ->
137-
Igniter.Code.Module.move_to_use(zipper, Phoenix.Endpoint) != :error
144+
Enum.find_value(@endpoint_modules, fn endpoint_module ->
145+
Igniter.Code.Module.move_to_use(zipper, endpoint_module) != :error
146+
end)
138147
end)
139148

140149
case endpoints do

test/igniter/libs/phoenix_test.exs

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,104 @@ defmodule Igniter.Libs.PhoenixTest do
326326
end
327327
end
328328

329+
describe "select_endpoint/3" do
330+
test "finds endpoints using Phoenix.Endpoint" do
331+
igniter =
332+
assert test_project()
333+
|> Igniter.create_new_file("lib/test_web/endpoint.ex", """
334+
defmodule TestWeb.Endpoint do
335+
use Phoenix.Endpoint, otp_app: :test
336+
end
337+
""")
338+
|> apply_igniter!()
339+
340+
{_igniter, endpoint} = Igniter.Libs.Phoenix.select_endpoint(igniter)
341+
assert endpoint == TestWeb.Endpoint
342+
end
343+
344+
test "finds endpoints using SiteEncrypt.Phoenix.Endpoint" do
345+
igniter =
346+
assert test_project()
347+
|> Igniter.create_new_file("lib/test_web/endpoint.ex", """
348+
defmodule TestWeb.Endpoint do
349+
use SiteEncrypt.Phoenix.Endpoint, otp_app: :test
350+
end
351+
""")
352+
|> apply_igniter!()
353+
354+
{_igniter, endpoint} = Igniter.Libs.Phoenix.select_endpoint(igniter)
355+
assert endpoint == TestWeb.Endpoint
356+
end
357+
358+
test "finds multiple endpoints using both Phoenix.Endpoint and SiteEncrypt.Phoenix.Endpoint" do
359+
igniter =
360+
assert test_project()
361+
|> Igniter.create_new_file("lib/test_web/endpoint.ex", """
362+
defmodule TestWeb.Endpoint do
363+
use Phoenix.Endpoint, otp_app: :test
364+
end
365+
""")
366+
|> Igniter.create_new_file("lib/admin_web/endpoint.ex", """
367+
defmodule AdminWeb.Endpoint do
368+
use SiteEncrypt.Phoenix.Endpoint, otp_app: :test
369+
end
370+
""")
371+
|> apply_igniter!()
372+
373+
{_igniter, endpoints} =
374+
Igniter.Project.Module.find_all_matching_modules(igniter, fn _mod, zipper ->
375+
Igniter.Code.Module.move_to_use(zipper, Phoenix.Endpoint) != :error ||
376+
Igniter.Code.Module.move_to_use(zipper, SiteEncrypt.Phoenix.Endpoint) != :error
377+
end)
378+
379+
assert TestWeb.Endpoint in endpoints
380+
assert AdminWeb.Endpoint in endpoints
381+
assert length(endpoints) == 2
382+
end
383+
end
384+
385+
describe "endpoints_for_router/2" do
386+
test "finds Phoenix.Endpoint that uses a router" do
387+
igniter =
388+
assert test_project()
389+
|> Igniter.create_new_file("lib/test_web/router.ex", """
390+
defmodule TestWeb.Router do
391+
use Phoenix.Router
392+
end
393+
""")
394+
|> Igniter.create_new_file("lib/test_web/endpoint.ex", """
395+
defmodule TestWeb.Endpoint do
396+
use Phoenix.Endpoint, otp_app: :test
397+
plug TestWeb.Router
398+
end
399+
""")
400+
|> apply_igniter!()
401+
402+
{_igniter, endpoints} = Igniter.Libs.Phoenix.endpoints_for_router(igniter, TestWeb.Router)
403+
assert TestWeb.Endpoint in endpoints
404+
end
405+
406+
test "finds SiteEncrypt.Phoenix.Endpoint that uses a router" do
407+
igniter =
408+
assert test_project()
409+
|> Igniter.create_new_file("lib/test_web/router.ex", """
410+
defmodule TestWeb.Router do
411+
use Phoenix.Router
412+
end
413+
""")
414+
|> Igniter.create_new_file("lib/test_web/endpoint.ex", """
415+
defmodule TestWeb.Endpoint do
416+
use SiteEncrypt.Phoenix.Endpoint, otp_app: :test
417+
plug TestWeb.Router
418+
end
419+
""")
420+
|> apply_igniter!()
421+
422+
{_igniter, endpoints} = Igniter.Libs.Phoenix.endpoints_for_router(igniter, TestWeb.Router)
423+
assert TestWeb.Endpoint in endpoints
424+
end
425+
end
426+
329427
describe "append_to_scope/4" do
330428
setup do
331429
router = """

0 commit comments

Comments
 (0)