Class: Rhales::Configuration
- Inherits:
-
Object
- Object
- Rhales::Configuration
- Defined in:
- lib/rhales/configuration.rb
Overview
Configuration management for Rhales library
Provides a clean, testable alternative to global configuration access. Supports block-based configuration typical of Ruby gems and dependency injection.
Usage: Rhales.configure do |config| config.default_locale = ‘en’ config.template_paths = [‘app/templates’, ‘lib/templates’] config.features = { account_creation: true } end
Defined Under Namespace
Classes: ConfigurationError
Instance Attribute Summary collapse
-
#allowed_unescaped_variables ⇒ Object
Logging settings.
-
#api_base_url ⇒ Object
Build API base URL from site configuration.
-
#app_environment ⇒ Object
Core application settings.
-
#auto_nonce ⇒ Object
Security settings.
-
#cache_parsed_templates ⇒ Object
Performance settings.
-
#cache_templates ⇒ Object
Template settings.
-
#cache_ttl ⇒ Object
Performance settings.
-
#csp_enabled ⇒ Object
Security settings.
-
#csp_policy ⇒ Object
Security settings.
-
#csrf_token_name ⇒ Object
Security settings.
-
#default_locale ⇒ Object
Core application settings.
-
#development_enabled ⇒ Object
Core application settings.
-
#enable_json_responder ⇒ Object
JSON response settings.
-
#enable_schema_validation ⇒ Object
Schema validation settings.
-
#fail_on_validation_error ⇒ Object
Schema validation settings.
-
#features ⇒ Object
Feature flags.
-
#hydration ⇒ Object
Hydration settings.
-
#hydration_authority ⇒ Object
Hydration mismatch reporting settings.
-
#hydration_mismatch_format ⇒ Object
Hydration mismatch reporting settings.
-
#json_responder_include_metadata ⇒ Object
JSON response settings.
-
#nonce_header_name ⇒ Object
Security settings.
-
#schemas_dir ⇒ Object
Schema validation settings.
-
#site_host ⇒ Object
Site configuration.
-
#site_ssl_enabled ⇒ Object
Site configuration.
-
#template_paths ⇒ Object
Template settings.
-
#template_root ⇒ Object
Template settings.
Instance Method Summary collapse
-
#default_csp_policy ⇒ Object
Default CSP policy with secure defaults.
-
#development? ⇒ Boolean
Check if development mode is enabled.
-
#feature_enabled?(feature_name) ⇒ Boolean
Get feature flag value.
-
#freeze! ⇒ Object
Deep freeze configuration to prevent modification after setup.
-
#initialize ⇒ Configuration
constructor
A new instance of Configuration.
-
#production? ⇒ Boolean
Check if production mode.
-
#validate! ⇒ Object
Validate configuration.
Constructor Details
#initialize ⇒ Configuration
Returns a new instance of Configuration.
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/rhales/configuration.rb', line 160 def initialize # Set sensible defaults @default_locale = 'en' @app_environment = 'development' @development_enabled = false @template_paths = [] @cache_templates = true @csrf_token_name = 'csrf_token' @nonce_header_name = 'nonce' @csp_enabled = true @auto_nonce = true @csp_policy = default_csp_policy @features = {} @site_ssl_enabled = false @cache_parsed_templates = true @cache_ttl = 3600 # 1 hour @hydration = HydrationConfiguration.new # Schema validation defaults @enable_schema_validation = true @fail_on_validation_error = false # Set by environment in middleware @schemas_dir = './public/schemas' # Default to implementing project's public directory # JSON responder defaults @enable_json_responder = true @json_responder_include_metadata = false # Logging defaults @allowed_unescaped_variables = [] # Hydration mismatch reporting defaults @hydration_mismatch_format = :compact # :compact, :multiline, :sidebyside, :json @hydration_authority = :schema # :schema or :data # Yield to block for configuration if provided yield(self) if block_given? end |
Instance Attribute Details
#allowed_unescaped_variables ⇒ Object
Logging settings
155 156 157 |
# File 'lib/rhales/configuration.rb', line 155 def allowed_unescaped_variables @allowed_unescaped_variables end |
#api_base_url ⇒ Object
Build API base URL from site configuration
140 141 142 |
# File 'lib/rhales/configuration.rb', line 140 def api_base_url @api_base_url end |
#app_environment ⇒ Object
Core application settings
128 129 130 |
# File 'lib/rhales/configuration.rb', line 128 def app_environment @app_environment end |
#auto_nonce ⇒ Object
Security settings
134 135 136 |
# File 'lib/rhales/configuration.rb', line 134 def auto_nonce @auto_nonce end |
#cache_parsed_templates ⇒ Object
Performance settings
143 144 145 |
# File 'lib/rhales/configuration.rb', line 143 def cache_parsed_templates @cache_parsed_templates end |
#cache_templates ⇒ Object
Template settings
131 132 133 |
# File 'lib/rhales/configuration.rb', line 131 def cache_templates @cache_templates end |
#cache_ttl ⇒ Object
Performance settings
143 144 145 |
# File 'lib/rhales/configuration.rb', line 143 def cache_ttl @cache_ttl end |
#csp_enabled ⇒ Object
Security settings
134 135 136 |
# File 'lib/rhales/configuration.rb', line 134 def csp_enabled @csp_enabled end |
#csp_policy ⇒ Object
Security settings
134 135 136 |
# File 'lib/rhales/configuration.rb', line 134 def csp_policy @csp_policy end |
#csrf_token_name ⇒ Object
Security settings
134 135 136 |
# File 'lib/rhales/configuration.rb', line 134 def csrf_token_name @csrf_token_name end |
#default_locale ⇒ Object
Core application settings
128 129 130 |
# File 'lib/rhales/configuration.rb', line 128 def default_locale @default_locale end |
#development_enabled ⇒ Object
Core application settings
128 129 130 |
# File 'lib/rhales/configuration.rb', line 128 def development_enabled @development_enabled end |
#enable_json_responder ⇒ Object
JSON response settings
152 153 154 |
# File 'lib/rhales/configuration.rb', line 152 def enable_json_responder @enable_json_responder end |
#enable_schema_validation ⇒ Object
Schema validation settings
149 150 151 |
# File 'lib/rhales/configuration.rb', line 149 def enable_schema_validation @enable_schema_validation end |
#fail_on_validation_error ⇒ Object
Schema validation settings
149 150 151 |
# File 'lib/rhales/configuration.rb', line 149 def fail_on_validation_error @fail_on_validation_error end |
#features ⇒ Object
Feature flags
137 138 139 |
# File 'lib/rhales/configuration.rb', line 137 def features @features end |
#hydration ⇒ Object
Hydration settings
146 147 148 |
# File 'lib/rhales/configuration.rb', line 146 def hydration @hydration end |
#hydration_authority ⇒ Object
Hydration mismatch reporting settings
158 159 160 |
# File 'lib/rhales/configuration.rb', line 158 def @hydration_authority end |
#hydration_mismatch_format ⇒ Object
Hydration mismatch reporting settings
158 159 160 |
# File 'lib/rhales/configuration.rb', line 158 def hydration_mismatch_format @hydration_mismatch_format end |
#json_responder_include_metadata ⇒ Object
JSON response settings
152 153 154 |
# File 'lib/rhales/configuration.rb', line 152 def @json_responder_include_metadata end |
#nonce_header_name ⇒ Object
Security settings
134 135 136 |
# File 'lib/rhales/configuration.rb', line 134 def nonce_header_name @nonce_header_name end |
#schemas_dir ⇒ Object
Schema validation settings
149 150 151 |
# File 'lib/rhales/configuration.rb', line 149 def schemas_dir @schemas_dir end |
#site_host ⇒ Object
Site configuration
140 141 142 |
# File 'lib/rhales/configuration.rb', line 140 def site_host @site_host end |
#site_ssl_enabled ⇒ Object
Site configuration
140 141 142 |
# File 'lib/rhales/configuration.rb', line 140 def site_ssl_enabled @site_ssl_enabled end |
#template_paths ⇒ Object
Template settings
131 132 133 |
# File 'lib/rhales/configuration.rb', line 131 def template_paths @template_paths end |
#template_root ⇒ Object
Template settings
131 132 133 |
# File 'lib/rhales/configuration.rb', line 131 def template_root @template_root end |
Instance Method Details
#default_csp_policy ⇒ Object
Default CSP policy with secure defaults
219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 |
# File 'lib/rhales/configuration.rb', line 219 def default_csp_policy { 'default-src' => ["'self'"], 'script-src' => ["'self'", "'nonce-{{nonce}}'"], 'style-src' => ["'self'", "'nonce-{{nonce}}'", "'unsafe-hashes'"], 'img-src' => ["'self'", 'data:'], 'font-src' => ["'self'"], 'connect-src' => ["'self'"], 'base-uri' => ["'self'"], 'form-action' => ["'self'"], 'frame-ancestors' => ["'none'"], 'object-src' => ["'none'"], 'media-src' => ["'self'"], 'worker-src' => ["'self'"], 'manifest-src' => ["'self'"], 'prefetch-src' => ["'self'"], 'upgrade-insecure-requests' => [], }.freeze end |
#development? ⇒ Boolean
Check if development mode is enabled
209 210 211 |
# File 'lib/rhales/configuration.rb', line 209 def development? @development_enabled || @app_environment == 'development' end |
#feature_enabled?(feature_name) ⇒ Boolean
Get feature flag value
240 241 242 |
# File 'lib/rhales/configuration.rb', line 240 def feature_enabled?(feature_name) @features[feature_name] || @features[feature_name.to_s] || false end |
#freeze! ⇒ Object
Deep freeze configuration to prevent modification after setup
269 270 271 272 273 |
# File 'lib/rhales/configuration.rb', line 269 def freeze! @features.freeze @template_paths.freeze freeze end |
#production? ⇒ Boolean
Check if production mode
214 215 216 |
# File 'lib/rhales/configuration.rb', line 214 def production? @app_environment == 'production' end |
#validate! ⇒ Object
Validate configuration
245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
# File 'lib/rhales/configuration.rb', line 245 def validate! errors = [] # Validate locale if @default_locale.nil? || @default_locale.empty? errors << 'default_locale cannot be empty' end # Validate template paths exist if specified @template_paths.each do |path| unless Dir.exist?(path) errors << "Template path does not exist: #{path}" end end # Validate cache TTL if @cache_ttl && @cache_ttl <= 0 errors << 'cache_ttl must be positive' end raise ConfigurationError, "Configuration errors: #{errors.join(', ')}" unless errors.empty? end |