Packages

phoenix_kit

1.1.0
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 config_env.ex
Raw

lib/phoenix_kit/config_env.ex

defmodule PhoenixKit.ConfigEnv do
@moduledoc """
Environment-based configuration loader for PhoenixKit.
This module provides functionality to load configuration from environment variables
and parent application settings, supporting common deployment patterns.
## Usage
case PhoenixKit.ConfigEnv.load_config() do
{:ok, config} ->
# Use loaded configuration
config
:not_loaded ->
# Fallback to defaults or raise error
raise "Configuration not loaded"
end
## Environment Variables
The module automatically detects and loads common environment variables:
- `DATABASE_URL` - Database connection string
- `SECRET_KEY_BASE` - Phoenix secret key base
- `PHX_HOST` - Application hostname
- `PORT` - Application port
- Custom PhoenixKit variables with `PHOENIX_KIT_` prefix
## Integration
This module integrates with the parent application's configuration system,
automatically detecting available configuration sources.
"""
@doc """
Loads configuration from environment and parent application.
Returns `{:ok, config}` if configuration is successfully loaded,
or `:not_loaded` if no configuration sources are available.
## Examples
iex> PhoenixKit.ConfigEnv.load_config()
{:ok, %{database_url: "postgres://...", secret_key_base: "..."}}
iex> PhoenixKit.ConfigEnv.load_config()
:not_loaded
"""
def load_config do
config = %{}
config
|> load_database_config()
|> load_phoenix_config()
|> load_phoenix_kit_config()
|> case do
config when map_size(config) > 0 ->
{:ok, config}
_empty ->
:not_loaded
end
end
@doc """
Gets a specific configuration value by key.
Returns `{:ok, value}` if the key exists, `:not_found` otherwise.
## Examples
iex> PhoenixKit.ConfigEnv.get_config(:database_url)
{:ok, "postgres://localhost/myapp"}
iex> PhoenixKit.ConfigEnv.get_config(:nonexistent)
:not_found
"""
def get_config(key) do
case load_config() do
{:ok, config} ->
case Map.get(config, key) do
nil -> :not_found
value -> {:ok, value}
end
:not_loaded ->
:not_found
end
end
# Load database-related configuration
defp load_database_config(config) do
config
|> maybe_put(:database_url, System.get_env("DATABASE_URL"))
|> maybe_put(:repo, detect_repo())
end
# Load Phoenix application configuration
defp load_phoenix_config(config) do
config
|> maybe_put(:secret_key_base, System.get_env("SECRET_KEY_BASE"))
|> maybe_put(:host, System.get_env("PHX_HOST") || System.get_env("HOST"))
|> maybe_put(:port, parse_port(System.get_env("PORT")))
end
# Load PhoenixKit specific configuration
defp load_phoenix_kit_config(config) do
System.get_env()
|> Enum.filter(fn {key, _value} -> String.starts_with?(key, "PHOENIX_KIT_") end)
|> Enum.reduce(config, fn {key, value}, acc ->
config_key =
key
|> String.replace_prefix("PHOENIX_KIT_", "")
|> String.downcase()
|> String.to_atom()
Map.put(acc, config_key, value)
end)
end
# Extract repository from application's ecto_repos configuration
defp extract_repo_from_app({app, _description, _version}) do
case Application.get_env(app, :ecto_repos) do
[repo | _] -> repo
_ -> nil
end
end
# Auto-detect Ecto repository from application configuration
defp detect_repo do
case Application.get_env(:phoenix_kit, :repo) do
nil ->
# Try to detect from common patterns
Application.loaded_applications()
|> Enum.find_value(&extract_repo_from_app/1)
configured_repo ->
configured_repo
end
end
# Parse port string to integer
defp parse_port(nil), do: nil
defp parse_port(port_string) when is_binary(port_string) do
case Integer.parse(port_string) do
{port, ""} when port > 0 and port <= 65_535 -> port
_ -> nil
end
end
# Helper to conditionally put values in map
defp maybe_put(map, _key, nil), do: map
defp maybe_put(map, _key, ""), do: map
defp maybe_put(map, key, value), do: Map.put(map, key, value)
end