Packages

phoenix_kit

1.7.13
1.7.208 1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib phoenix_kit install igniter_helpers.ex
Raw

lib/phoenix_kit/install/igniter_helpers.ex

defmodule PhoenixKit.Install.IgniterHelpers do
@moduledoc """
Helper functions for working with Igniter to detect parent application information.
This module provides utilities to automatically detect and extract information about
the parent Phoenix application during the installation process. These helpers are
used by the installer to determine module names, layouts, and router configurations
without requiring manual user input.
All functions are designed to work with Igniter's project detection capabilities
and provide sensible defaults when detection fails.
## Examples
iex> igniter = Igniter.new()
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_name(igniter)
:parent_app
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_module_web_string(igniter)
"ParentAppWeb"
"""
alias Igniter.Project.Module, as: IgniterModule
@doc """
Gets the parent application name (atom) from the Igniter project.
Uses Igniter's application detection to determine the OTP application name.
This is typically used for configuration and dependency injection.
## Parameters
- `igniter` - The Igniter project struct
## Returns
The application name as an atom (e.g., `:parent_app`)
## Examples
iex> igniter = Igniter.new()
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_name(igniter)
:parent_app
"""
@spec get_parent_app_name(Igniter.t()) :: atom()
def get_parent_app_name(igniter) do
Igniter.Project.Application.app_name(igniter)
end
@doc """
Gets the parent application module name from the Igniter project.
Extracts the main application module name (e.g., `ParentApp`) from the project
structure. This is used as the base for constructing other module names.
## Parameters
- `igniter` - The Igniter project struct
## Returns
The main application module as an atom (e.g., `ParentApp`)
## Examples
iex> igniter = Igniter.new()
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_module(igniter)
ParentApp
"""
@spec get_parent_app_module(Igniter.t()) :: module()
def get_parent_app_module(igniter) do
Igniter.Project.Module.module_name_prefix(igniter)
end
@doc """
Constructs the Web module name for the parent application.
Builds the standard Phoenix Web module name by concatenating the base
application module with "Web" (e.g., `ParentAppWeb`).
## Parameters
- `igniter` - The Igniter project struct
## Returns
The Web module as an atom (e.g., `ParentAppWeb`)
## Examples
iex> igniter = Igniter.new()
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_module_web(igniter)
ParentAppWeb
"""
@spec get_parent_app_module_web(Igniter.t()) :: module()
def get_parent_app_module_web(igniter) do
module_name = IgniterModule.module_name_prefix(igniter)
module_name_web = Module.concat(["#{module_name}" <> "Web"])
module_name_web
end
@doc """
Gets the Web module name as a string with fallback to default.
Converts the Web module to a string representation and provides a fallback
default value when detection fails. This is useful for generating user-facing
messages or configuration examples.
## Parameters
- `igniter` - The Igniter project struct
- `default` - Default string to return when detection fails (default: "YourAppWeb")
## Returns
The Web module name as a string (e.g., "ParentAppWeb") or the default value
## Examples
iex> igniter = Igniter.new()
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_module_web_string(igniter)
"ParentAppWeb"
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_module_web_string(igniter, "FallbackWeb")
"ParentAppWeb"
"""
@spec get_parent_app_module_web_string(Igniter.t(), String.t()) :: String.t()
def get_parent_app_module_web_string(igniter, default \\ "YourAppWeb") do
module_name_web = get_parent_app_module_web(igniter)
name = Macro.to_string(module_name_web)
if name === "nil" do
default
else
name
end
end
@doc """
Detects the existing Layouts module in the parent application.
Searches for Layouts modules in both possible locations:
- `ParentAppWeb.Layouts` (standard Phoenix location)
- `ParentApp.Layouts` (alternative location)
This function is used during installation to determine which layout module
exists so PhoenixKit can integrate with the existing layout structure.
## Parameters
- `igniter` - The Igniter project struct
## Returns
The Layouts module if found, or `nil` if no Layouts module exists
## Search Order
1. `MyAppWeb.Layouts` - Standard Phoenix web layouts location
2. `MyApp.Layouts` - Alternative layouts location
## Examples
iex> igniter = Igniter.new()
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_module_web_layouts(igniter)
MyAppWeb.Layouts
# When no layouts module exists
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_module_web_layouts(igniter)
nil
"""
@spec get_parent_app_module_web_layouts(Igniter.t()) :: module() | nil
def get_parent_app_module_web_layouts(igniter) do
module_name = IgniterModule.module_name_prefix(igniter)
module_name_web = Module.concat(["#{module_name}" <> "Web"])
module_name_layouts = Module.concat([module_name, Layouts])
module_name_web_layouts = Module.concat([module_name_web, Layouts])
case IgniterModule.module_exists(igniter, module_name_web_layouts) do
{true, _igniter} ->
module_name_web_layouts
{false, igniter} ->
case IgniterModule.module_exists(igniter, module_name_layouts) do
{true, _igniter} ->
module_name_layouts
{false, _igniter} ->
nil
end
end
end
@doc """
Constructs the Router module name for the parent application.
Builds the standard Phoenix Router module name by concatenating the Web
module with "Router" (e.g., `MyAppWeb.Router`).
This is used during installation to determine where to inject PhoenixKit
routes into the existing router configuration.
## Parameters
- `igniter` - The Igniter project struct
## Returns
The Router module as an atom (e.g., `MyAppWeb.Router`)
## Examples
iex> igniter = Igniter.new()
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_module_web_router(igniter)
MyAppWeb.Router
"""
@spec get_parent_app_module_web_router(Igniter.t()) :: module()
def get_parent_app_module_web_router(igniter) do
module_name = IgniterModule.module_name_prefix(igniter)
module_name_web = Module.concat(["#{module_name}" <> "Web"])
module_name_web_router = Module.concat([module_name_web, Router])
module_name_web_router
end
@doc """
Constructs the Endpoint module name for the parent application.
Builds the standard Phoenix Endpoint module name by concatenating the Web
module with "Endpoint" (e.g., `MyAppWeb.Endpoint`).
This is used during installation to add PhoenixKit sockets to the endpoint.
## Parameters
- `igniter` - The Igniter project struct
## Returns
The Endpoint module as an atom (e.g., `MyAppWeb.Endpoint`)
## Examples
iex> igniter = Igniter.new()
iex> PhoenixKit.Install.IgniterHelpers.get_parent_app_module_web_endpoint(igniter)
MyAppWeb.Endpoint
"""
@spec get_parent_app_module_web_endpoint(Igniter.t()) :: module()
def get_parent_app_module_web_endpoint(igniter) do
module_name = IgniterModule.module_name_prefix(igniter)
module_name_web = Module.concat(["#{module_name}" <> "Web"])
Module.concat([module_name_web, Endpoint])
end
end