Packages
phoenix_kit
1.7.99
1.7.210
1.7.209
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
Current section
Files
lib/phoenix_kit/install/demo_files.ex
defmodule PhoenixKit.Install.DemoFiles do
@moduledoc """
Handles copying demo test files for PhoenixKit installation.
This module provides functionality to:
- Copy test demo files to parent project
- Transform module names to match parent app
- Generate appropriate demo file notices
"""
use PhoenixKit.Install.IgniterCompat
alias Igniter.Project.Application
alias Mix.Tasks.PhoenixKitTemplates
alias PhoenixKit.Install.IgniterHelpers
@doc """
Copies test demo files to the parent project.
## Parameters
- `igniter` - The igniter context
## Returns
Updated igniter with demo files copied and notices added.
"""
def copy_test_demo_files(igniter) do
case Application.app_name(igniter) do
nil ->
Igniter.add_warning(igniter, "Could not determine app name for copying test demo files")
:phoenix_kit ->
# This is the PhoenixKit library itself, skip copying test files
igniter
app_name ->
app_web_module = IgniterHelpers.get_parent_app_module_web(igniter)
# Create demo directory path - directly in app_web as phoenix_kit_live
app_web_dir = Macro.underscore(to_string(app_name)) <> "_web"
demo_dir = Path.join([app_web_dir, "phoenix_kit_live"])
igniter
|> copy_test_file("test_ensure_auth_live.ex", demo_dir, app_web_module)
|> copy_test_file("test_redirect_if_auth_live.ex", demo_dir, app_web_module)
|> copy_test_file("test_require_auth_live.ex", demo_dir, app_web_module)
|> add_test_demo_notice()
end
end
# Copy a single test file to demo directory using embedded content
defp copy_test_file(igniter, filename, demo_dir, app_web_module) do
# Create files in live/ directory with proper notifications
content = get_embedded_test_file_content(filename)
if content do
# First update use statement to avoid conflicts
app_web_module_string = inspect(app_web_module)
updated_content =
String.replace(
content,
"use PhoenixKitWeb, :live_view",
"use #{app_web_module_string}, :live_view"
)
# Then replace module names (but not the use statement)
updated_content =
String.replace(
updated_content,
"defmodule PhoenixKitWeb",
"defmodule #{app_web_module_string}.PhoenixKitLive"
)
# Create file only if it doesn't exist (skip if already exists)
dest_path = Path.join(["lib", demo_dir, filename])
if File.exists?(dest_path) do
# File exists, add notice and skip creation
Igniter.add_notice(igniter, "Demo file already exists, skipping: #{dest_path}")
else
# File doesn't exist, create it
Igniter.create_new_file(igniter, dest_path, updated_content)
end
else
Igniter.add_warning(igniter, "Unknown test file: #{filename}")
end
end
# Get embedded content for test files
defp get_embedded_test_file_content("test_ensure_auth_live.ex") do
PhoenixKitTemplates.get_test_ensure_auth_live()
end
defp get_embedded_test_file_content("test_redirect_if_auth_live.ex") do
PhoenixKitTemplates.get_test_redirect_if_auth_live()
end
defp get_embedded_test_file_content("test_require_auth_live.ex") do
PhoenixKitTemplates.get_test_require_auth_live()
end
defp get_embedded_test_file_content(_), do: nil
# Add notice about demo files
defp add_test_demo_notice(igniter) do
notice = "📝 Demo pages: /test-current-user, /test-redirect-if-auth, /test-ensure-auth"
Igniter.add_notice(igniter, notice)
end
end