Packages

phoenix_kit

1.7.78
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 modules publishing constants.ex
Raw

lib/modules/publishing/constants.ex

defmodule PhoenixKit.Modules.Publishing.Constants do
@moduledoc """
Centralized constants for the Publishing module.
Provides canonical lists for statuses, modes, and types used across
schemas, business logic, and templates. Import or alias this module
instead of hardcoding these values inline.
For guard clauses and pattern matches, use the module attributes:
@timestamp_modes Publishing.Constants.timestamp_modes()
@slug_modes Publishing.Constants.slug_modes()
def my_func(mode) when mode in @timestamp_modes do ...
"""
# ---------------------------------------------------------------------------
# Modes (post and group)
# ---------------------------------------------------------------------------
@timestamp_modes [:timestamp, "timestamp"]
@slug_modes [:slug, "slug"]
@valid_modes ["timestamp", "slug"]
@doc "Atom and string variants for timestamp mode — use in guards/pattern matches."
def timestamp_modes, do: @timestamp_modes
@doc "Atom and string variants for slug mode — use in guards/pattern matches."
def slug_modes, do: @slug_modes
@doc "Valid mode strings for schema validation."
def valid_modes, do: @valid_modes
@doc "Returns true if mode is a timestamp mode (atom or string)."
def timestamp_mode?(mode), do: mode in @timestamp_modes
@doc "Returns true if mode is a slug mode (atom or string)."
def slug_mode?(mode), do: mode in @slug_modes
# ---------------------------------------------------------------------------
# Statuses
# ---------------------------------------------------------------------------
@post_statuses ["draft", "published", "archived", "trashed"]
@content_statuses ["draft", "published", "archived"]
@group_statuses ["active", "trashed"]
@doc "Valid post statuses: draft, published, archived, trashed."
def post_statuses, do: @post_statuses
@doc "Valid version and content statuses: draft, published, archived."
def content_statuses, do: @content_statuses
@doc "Valid group statuses: active, trashed."
def group_statuses, do: @group_statuses
# ---------------------------------------------------------------------------
# Group types
# ---------------------------------------------------------------------------
@preset_types ["blog", "faq", "legal"]
@valid_types ["blog", "faq", "legal", "custom"]
@doc "Preset group types (shown as radio buttons in UI)."
def preset_types, do: @preset_types
@doc "All valid group types including custom."
def valid_types, do: @valid_types
# ---------------------------------------------------------------------------
# Defaults
# ---------------------------------------------------------------------------
@default_mode "timestamp"
@default_type "blog"
@default_title "Untitled"
@doc "Default group mode."
def default_mode, do: @default_mode
@doc "Default group type."
def default_type, do: @default_type
@doc "Default title for posts without a title."
def default_title, do: @default_title
# ---------------------------------------------------------------------------
# Schema limits
# ---------------------------------------------------------------------------
@max_slug_length 500
@max_title_length 500
@max_language_code_length 10
@max_group_name_length 255
@max_group_slug_length 255
@doc "Max length for post/content slugs."
def max_slug_length, do: @max_slug_length
@doc "Max length for content titles."
def max_title_length, do: @max_title_length
@doc "Max length for language codes."
def max_language_code_length, do: @max_language_code_length
@doc "Max length for group names."
def max_group_name_length, do: @max_group_name_length
@doc "Max length for group slugs."
def max_group_slug_length, do: @max_group_slug_length
end