Packages

phoenix_kit

1.7.189
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 prefix_config.ex
Raw

lib/phoenix_kit/install/prefix_config.ex

defmodule PhoenixKit.Install.PrefixConfig do
@moduledoc """
Persists the `--prefix` install option into the host's config files.
`mix phoenix_kit.install --prefix "auth"` bakes the prefix into the
generated migration, but the migration docs also tell hosts to set
config :phoenix_kit, prefix: "auth"
Without that config entry, later tooling (`mix phoenix_kit.update`,
`mix phoenix_kit.status`) defaults to `"public"`, reports the install
as missing, and — worst case — generates a from-scratch migration
into the wrong schema. This module writes the config entry whenever
a non-public prefix is used, mirroring how the repo config is added.
"""
use PhoenixKit.Install.IgniterCompat
alias Igniter.Project.Config
alias PhoenixKit.Migrations.Postgres.Helpers
@doc """
Resolves the effective schema prefix for phoenix_kit mix tasks.
Order: explicit `--prefix` option → `config :phoenix_kit, :prefix`
`"public"`. Raises `ArgumentError` for a prefix the migration chain
would reject anyway (empty string, uppercase, dashes, injection
shapes) — failing at the task boundary beats failing mid-migration.
"""
@spec resolve_prefix(keyword() | map()) :: String.t()
def resolve_prefix(opts) do
prefix = opts[:prefix] || configured_prefix() || "public"
Helpers.validate_prefix!(prefix)
prefix
end
defp configured_prefix do
case Elixir.Application.get_env(:phoenix_kit, :prefix) do
prefix when is_binary(prefix) and prefix != "" -> prefix
_ -> nil
end
end
@doc """
Adds `config :phoenix_kit, prefix: prefix` to config.exs and test.exs
when installing with a non-public prefix. No-op for the default
`"public"` prefix (or when no prefix option was given).
"""
@spec add_prefix_configuration(term(), String.t() | nil) :: term()
def add_prefix_configuration(igniter, prefix) when prefix in [nil, "public"], do: igniter
def add_prefix_configuration(igniter, prefix) when is_binary(prefix) do
# Fail at install time, not at mix ecto.migrate time — the chain
# rejects anything outside [a-z_][a-z0-9_]* and we'd otherwise
# persist the bad value into config + the generated migration.
# Deliberately OUTSIDE persist_prefix_config/2's rescue: a validation
# failure must abort, not degrade into the "add it manually" notice.
Helpers.validate_prefix!(prefix)
persist_prefix_config(igniter, prefix)
end
defp persist_prefix_config(igniter, prefix) do
igniter
|> Config.configure_new("config.exs", :phoenix_kit, [:prefix], prefix)
|> Config.configure_new("test.exs", :phoenix_kit, [:prefix], prefix)
rescue
_ ->
Igniter.add_notice(igniter, """
⚠️ Could not persist the schema prefix automatically.
Please add this to config/config.exs (and config/test.exs):
config :phoenix_kit, prefix: #{inspect(prefix)}
Without it, mix phoenix_kit.update / status will look for the
installation in the "public" schema.
""")
end
end