Packages

phoenix_kit

1.7.88
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 utils phoenix_version.ex
Raw

lib/phoenix_kit/utils/phoenix_version.ex

defmodule PhoenixKit.Utils.PhoenixVersion do
@moduledoc """
Utilities for detecting and working with Phoenix framework versions.
This module provides functions to detect the Phoenix version in use
and determine compatibility strategies for different Phoenix versions,
particularly for layout integration between v1.7- and v1.8+.
## Usage
iex> PhoenixKit.Utils.PhoenixVersion.get_version()
"1.8.2"
iex> PhoenixKit.Utils.PhoenixVersion.get_strategy()
:modern
iex> PhoenixKit.Utils.PhoenixVersion.supports_function_components?()
true
## Version Strategies
- `:legacy` - Phoenix < 1.8.0, uses router-level layout configuration
- `:modern` - Phoenix >= 1.8.0, supports function component layouts
"""
@legacy_fallback_version "1.7.0"
@modern_threshold_version "1.8.0"
@doc """
Gets the current Phoenix framework version as a string.
Returns the version from the Phoenix application specification,
or a fallback version if Phoenix is not found.
## Examples
iex> PhoenixKit.Utils.PhoenixVersion.get_version()
"1.8.2"
"""
@spec get_version() :: String.t()
def get_version do
case Application.spec(:phoenix) do
nil ->
@legacy_fallback_version
spec ->
spec
|> Keyword.get(:vsn, @legacy_fallback_version)
|> normalize_version()
end
end
@doc """
Gets the compatibility strategy for the current Phoenix version.
Returns either `:legacy` for Phoenix < 1.8.0 or `:modern` for Phoenix >= 1.8.0.
## Examples
iex> PhoenixKit.Utils.PhoenixVersion.get_strategy()
:modern
"""
@spec get_strategy() :: :legacy | :modern
def get_strategy do
version = get_version()
case Version.compare(version, @modern_threshold_version) do
# Phoenix < 1.8.0
:lt -> :legacy
# Phoenix >= 1.8.0
_ -> :modern
end
end
@doc """
Checks if the current Phoenix version supports function component layouts.
Function component layouts were introduced in Phoenix 1.8.0.
## Examples
iex> PhoenixKit.Utils.PhoenixVersion.supports_function_components?()
true
"""
@spec supports_function_components?() :: boolean()
def supports_function_components? do
get_strategy() == :modern
end
@doc """
Checks if the current Phoenix version requires legacy layout configuration.
Legacy layout configuration is required for Phoenix < 1.8.0.
## Examples
iex> PhoenixKit.Utils.PhoenixVersion.requires_legacy_config?()
false
"""
@spec requires_legacy_config?() :: boolean()
def requires_legacy_config? do
get_strategy() == :legacy
end
@doc """
Checks if a specific version string represents a modern Phoenix version.
## Examples
iex> PhoenixKit.Utils.PhoenixVersion.modern_version?("1.8.0")
true
iex> PhoenixKit.Utils.PhoenixVersion.modern_version?("1.7.14")
false
"""
@spec modern_version?(String.t()) :: boolean()
def modern_version?(version_string) when is_binary(version_string) do
normalized = normalize_version(version_string)
case Version.compare(normalized, @modern_threshold_version) do
:lt -> false
_ -> true
end
rescue
Version.InvalidVersionError -> false
end
@doc """
Gets version information for debugging and diagnostics.
Returns a map with detailed version information including the raw version
from the application spec and the normalized version used for comparisons.
## Examples
iex> PhoenixKit.Utils.PhoenixVersion.get_version_info()
%{
raw_version: '1.8.2',
normalized_version: "1.8.2",
strategy: :modern,
supports_function_components: true,
threshold_version: "1.8.0"
}
"""
@spec get_version_info() :: map()
def get_version_info do
raw_spec = Application.spec(:phoenix)
raw_version = if raw_spec, do: Keyword.get(raw_spec, :vsn), else: nil
normalized = get_version()
strategy = get_strategy()
%{
raw_version: raw_version,
normalized_version: normalized,
strategy: strategy,
supports_function_components: supports_function_components?(),
requires_legacy_config: requires_legacy_config?(),
threshold_version: @modern_threshold_version,
fallback_version: @legacy_fallback_version
}
end
## Private Functions
# Normalizes version from application spec (charlist or string) to string
defp normalize_version(version) when is_list(version) do
version
|> to_string()
|> String.trim()
end
defp normalize_version(version) when is_binary(version) do
String.trim(version)
end
defp normalize_version(_), do: @legacy_fallback_version
end