Class: Hanami::Config Private
- Inherits:
-
Object
- Object
- Hanami::Config
- Includes:
- Dry::Configurable
- Defined in:
- lib/hanami/config.rb,
lib/hanami/config/db.rb,
lib/hanami/config/i18n.rb,
lib/hanami/config/views.rb,
lib/hanami/config/assets.rb,
lib/hanami/config/logger.rb,
lib/hanami/config/router.rb,
lib/hanami/config/actions.rb,
lib/hanami/config/console.rb,
lib/hanami/config/null_config.rb,
lib/hanami/config/actions/cookies.rb,
lib/hanami/config/actions/sessions.rb,
lib/hanami/config/actions/content_security_policy.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Hanami app config
Defined Under Namespace
Classes: Actions, Assets, Console, DB, I18n, Logger, NullConfig, Router, Views
Instance Attribute Summary collapse
-
#actions ⇒ Hanami::Config::Actions, Hanami::Config::NullConfig
readonly
Returns the app’s actions config, or a null config if hanami-action is not bundled.
-
#app_name ⇒ Hanami::SliceName
readonly
private
Returns the app or slice’s slice_name.
-
#assets ⇒ Hanami::Config::Assets, Hanami::Config::NullConfig
readonly
Returns the app’s views config, or a null config if hanami-view is not bundled.
-
#base_url ⇒ URI
Sets the base URL for app’s web server.
-
#console ⇒ Hanami::Config::Console
Returns the app’s console config.
-
#db ⇒ Hanami::Config::DB, Hanami::Config::NullConfig
readonly
Returns the app’s db config, or a null config if hanami-db is not bundled.
-
#env ⇒ Symbol
readonly
private
Returns the app’s environment.
-
#i18n ⇒ Hanami::Config::I18n, Hanami::Config::NullConfig
readonly
Returns the app’s i18n config, or a null config if i18n is not bundled.
-
#inflector ⇒ Dry::Inflector
Sets the app’s inflector.
-
#middleware ⇒ Hanami::Slice::Routing::Middleware::Stack?
(also: #middleware_stack)
readonly
Returns the app’s middleware stack, or nil if hanami-router is not bundled.
-
#no_auto_register_paths ⇒ Array<String>
Sets the paths to skip from container auto-registration.
-
#no_memoize ⇒ Array<String>, Proc
Sets the components that should not be memoized in the container.
-
#render_detailed_errors ⇒ Boolean
Sets whether to catch exceptions and render detailed, interactive error pages.
-
#render_error_responses ⇒ Hash{String => Symbol}
Sets a mapping of exception class names (as strings) to symbolic response status codes used for rendering error responses.
-
#render_errors ⇒ Boolean
Sets whether to catch exceptions and render error pages.
-
#root ⇒ Pathname
Sets the root for the app or slice.
-
#router ⇒ Hanami::Config::Router, Hanami::Config::NullConfig
readonly
Returns the app’s router config, or a null config if hanami-router is not bundled.
-
#settings_store ⇒ #fetch
Sets the store used to retrieve Settings values.
-
#shared_app_component_keys ⇒ Array<String>
Sets the keys for the components to be imported from the app into all other slices.
-
#slices ⇒ Array<String>?
Sets the slices to load when the app is preared or booted.
-
#views ⇒ Hanami::Config::Views, Hanami::Config::NullConfig
readonly
Returns the app’s views config, or a null config if hanami-view is not bundled.
Instance Method Summary collapse
-
#finalize! ⇒ Object
private
Finalizes the config.
-
#inflections(&block) ⇒ Dry::Inflector
Configures the app’s custom inflections.
-
#initialize(app_name:, env:) {|_self| ... } ⇒ Config
constructor
private
rubocop:disable Metrics/AbcSize.
-
#logger ⇒ Hanami::Config::Logger
Returns the logger config.
-
#logger=(logger_instance) ⇒ Object
Sets the app’s logger instance.
-
#logger_instance ⇒ Dry::Logger::Dispatcher
Returns the configured logger instance.
Constructor Details
#initialize(app_name:, env:) {|_self| ... } ⇒ Config
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
rubocop:disable Metrics/AbcSize
359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 |
# File 'lib/hanami/config.rb', line 359 def initialize(app_name:, env:) @app_name = app_name @env = env # Apply default values that are only knowable at initialize-time (vs require-time) self.root = Dir.pwd self.render_errors = (env == :production) self.render_detailed_errors = (env == :development) load_from_env @actions = load_dependent_config("hanami-action") { require_relative "config/actions" Actions.new } @assets = load_dependent_config("hanami-assets") { require_relative "config/assets" Hanami::Config::Assets.new } @db = load_dependent_config("hanami-db") { DB.new } @i18n = load_dependent_config("i18n") { require_relative "config/i18n" I18n.new } @logger = Config::Logger.new(env: env, app_name: app_name) @middleware = load_dependent_config("hanami-router") { require_relative "slice/routing/middleware/stack" Slice::Routing::Middleware::Stack.new } @router = load_dependent_config("hanami-router") { require_relative "config/router" Router.new(self) } @views = load_dependent_config("hanami-view") { require_relative "config/views" Views.new } yield self if block_given? end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (private)
552 553 554 555 556 557 558 |
# File 'lib/hanami/config.rb', line 552 def method_missing(name, *args, &block) if config.respond_to?(name) config.public_send(name, *args, &block) else super end end |
Instance Attribute Details
#actions ⇒ Hanami::Config::Actions, Hanami::Config::NullConfig (readonly)
Returns the app’s actions config, or a null config if hanami-action is not bundled.
267 268 269 |
# File 'lib/hanami/config.rb', line 267 def actions @actions end |
#app_name ⇒ Hanami::SliceName (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the app or slice’s slice_name.
This is useful for default config values that depend on this name.
240 241 242 |
# File 'lib/hanami/config.rb', line 240 def app_name @app_name end |
#assets ⇒ Hanami::Config::Assets, Hanami::Config::NullConfig (readonly)
Returns the app’s views config, or a null config if hanami-view is not bundled.
355 356 357 |
# File 'lib/hanami/config.rb', line 355 def assets @assets end |
#base_url ⇒ URI
Sets the base URL for app’s web server.
This is passed to the router and used for generating links.
Defaults to ‘“0.0.0.0:2300”`. String values passed are turned into `URI` instances.
166 |
# File 'lib/hanami/config.rb', line 166 setting :base_url, default: "http://0.0.0.0:2300", constructor: ->(url) { URI(url) } |
#console ⇒ Hanami::Config::Console
Returns the app’s console config
230 |
# File 'lib/hanami/config.rb', line 230 setting :console, default: Hanami::Config::Console.new |
#db ⇒ Hanami::Config::DB, Hanami::Config::NullConfig (readonly)
Returns the app’s db config, or a null config if hanami-db is not bundled.
281 282 283 |
# File 'lib/hanami/config.rb', line 281 def db @db end |
#env ⇒ Symbol (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns the app’s environment.
253 254 255 |
# File 'lib/hanami/config.rb', line 253 def env @env end |
#i18n ⇒ Hanami::Config::I18n, Hanami::Config::NullConfig (readonly)
Returns the app’s i18n config, or a null config if i18n is not bundled.
295 296 297 |
# File 'lib/hanami/config.rb', line 295 def i18n @i18n end |
#inflector ⇒ Dry::Inflector
Sets the app’s inflector.
This expects a ‘Dry::Inflector` (or compatible) inflector instance.
To configure custom inflection rules without having to assign a whole inflector, see #inflections.
46 |
# File 'lib/hanami/config.rb', line 46 setting :inflector, default: Dry::Inflector.new |
#middleware ⇒ Hanami::Slice::Routing::Middleware::Stack? (readonly) Also known as: middleware_stack
Returns the app’s middleware stack, or nil if hanami-router is not bundled.
Use this to configure middleware that should apply to all routes.
309 310 311 |
# File 'lib/hanami/config.rb', line 309 def middleware @middleware end |
#no_auto_register_paths ⇒ Array<String>
Sets the paths to skip from container auto-registration.
Paths are relative to ‘/app` or a slice root.
Defaults to ‘[“db”, “entities”, “relations”, “structs”]`.
116 117 118 119 120 121 |
# File 'lib/hanami/config.rb', line 116 setting :no_auto_register_paths, default: [ "db", "entities", "relations", "structs" ] |
#no_memoize ⇒ Array<String>, Proc
Sets the components that should not be memoized in the container.
All auto-registered components are memoized by default, meaning each component is resolved only once, with the same instance returned on every subsequent resolution.
Use this setting to opt specific components out of memoization. It accepts an array of key prefixes (strings) for the simple case, or a proc for full control. The proc receives a ‘Dry::System::Component` and should return `true` for components that should not be memoized.
Individual components can also opt out by adding a ‘# memoize: false` magic comment at the top of their source file.
Defaults to ‘[]` (all components memoized).
151 |
# File 'lib/hanami/config.rb', line 151 setting :no_memoize, default: [] |
#render_detailed_errors ⇒ Boolean
Sets whether to catch exceptions and render detailed, interactive error pages.
Requires the hanami-webconsole gem to be available.
Defaults to ‘false` in production mode, `true` in all others.
192 |
# File 'lib/hanami/config.rb', line 192 setting :render_detailed_errors, default: false |
#render_error_responses ⇒ Hash{String => Symbol}
Sets a mapping of exception class names (as strings) to symbolic response status codes used for rendering error responses.
The response status codes will be passed to ‘Rack::Utils.status_code`.
In ordinary usage, you should not replace this hash. Instead, add keys and values for the errors you want handled.
215 216 217 218 |
# File 'lib/hanami/config.rb', line 215 setting :render_error_responses, default: Hash.new(:internal_server_error).merge!( "Hanami::Router::NotAllowedError" => :not_found, "Hanami::Router::NotFoundError" => :not_found ) |
#render_errors ⇒ Boolean
Sets whether to catch exceptions and render error pages.
For HTML responses, these error pages are in ‘public/404,500.html`.
Defaults to ‘true` in production mode, `false` in all others.
179 |
# File 'lib/hanami/config.rb', line 179 setting :render_errors, default: false |
#root ⇒ Pathname
Sets the root for the app or slice.
For the app, this defaults to ‘Dir.pwd`. For slices detected in `slices/` `config/slices/`, this defaults to `slices//`.
Accepts a string path and will return a ‘Pathname`.
30 |
# File 'lib/hanami/config.rb', line 30 setting :root, constructor: ->(path) { Pathname(path) if path } |
#router ⇒ Hanami::Config::Router, Hanami::Config::NullConfig (readonly)
Returns the app’s router config, or a null config if hanami-router is not bundled.
327 328 329 |
# File 'lib/hanami/config.rb', line 327 def router @router end |
#settings_store ⇒ #fetch
Sets the store used to retrieve Settings values.
Defaults to an instance of Settings::EnvStore.
60 |
# File 'lib/hanami/config.rb', line 60 setting :settings_store, default: Hanami::Settings::EnvStore.new |
#shared_app_component_keys ⇒ Array<String>
Sets the keys for the components to be imported from the app into all other slices.
You should append items to this array, since the default shared components are essential for slices to operate within the app.
96 97 98 99 100 101 102 103 |
# File 'lib/hanami/config.rb', line 96 setting :shared_app_component_keys, default: %w[ inflector logger notifications rack.monitor routes settings ] |
#slices ⇒ Array<String>?
Sets the slices to load when the app is preared or booted.
Defaults to ‘nil`, which will load all slices. Set this to an array of slice names to load only those slices.
This attribute is also populated from the ‘HANAMI_SLICES` environment variable.
81 |
# File 'lib/hanami/config.rb', line 81 setting :slices |
#views ⇒ Hanami::Config::Views, Hanami::Config::NullConfig (readonly)
Returns the app’s views config, or a null config if hanami-view is not bundled.
341 342 343 |
# File 'lib/hanami/config.rb', line 341 def views @views end |
Instance Method Details
#finalize! ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Finalizes the config.
This is called when the app or slice is prepared. After this, no further changes to config can be made.
432 433 434 435 436 437 438 439 440 441 |
# File 'lib/hanami/config.rb', line 432 def finalize! # Finalize nested configs assets.finalize! actions.finalize!(self) views.finalize! logger.finalize! router.finalize! super end |
#inflections(&block) ⇒ Dry::Inflector
Configures the app’s custom inflections.
You should call this one time only. Subsequent calls will override previously configured inflections.
459 460 461 |
# File 'lib/hanami/config.rb', line 459 def inflections(&block) self.inflector = Dry::Inflector.new(&block) end |
#logger ⇒ Hanami::Config::Logger
Returns the logger config.
Use this to configure various options for the default ‘Dry::Logger::Dispatcher` logger instance.
480 481 482 |
# File 'lib/hanami/config.rb', line 480 def logger @logger end |
#logger=(logger_instance) ⇒ Object
Sets the app’s logger instance.
This entirely replaces the default ‘Dry::Logger::Dispatcher` instance that would have been configured via #logger.
The provided logger will be wrapped with UniversalLogger if it doesn’t support both keyword arguments and ‘#tagged` logging, ensuring compatibility with Hanami’s logging interface.
498 499 500 |
# File 'lib/hanami/config.rb', line 498 def logger=(logger_instance) @logger_instance = Hanami::UniversalLogger[logger_instance] end |
#logger_instance ⇒ Dry::Logger::Dispatcher
Returns the configured logger instance.
Unless you’ve replaced the logger with #logger=, this returns a ‘Dry::Logger::Dispatcher` configured with the options configured through #logger.
This configured logger is registered in all app and slice containers as ‘“logger”`. For typical usage, you should access the logger via this component, not directly from config.
533 534 535 |
# File 'lib/hanami/config.rb', line 533 def logger_instance @logger_instance || logger.instance end |