Class: Hanami::Controller::Configuration
- Inherits:
-
Object
- Object
- Hanami::Controller::Configuration
- Defined in:
- lib/hanami/controller/configuration.rb
Overview
Configuration for the framework, controllers and actions.
Hanami::Controller has its own global configuration that can be manipulated via ‘Hanami::Controller.configure`.
Every time that ‘Hanami::Controller` and `Hanami::Action` are included, that global configuration is being copied to the recipient. The copy will inherit all the settings from the original, but all the subsequent changes aren’t reflected from the parent to the children, and viceversa.
This architecture allows to have a global configuration that capture the most common cases for an application, and let controllers and single actions to specify exceptions.
Constant Summary collapse
- DEFAULT_ERROR_CODE =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Default HTTP code for server side errors
500
- DEFAULT_FORMATS =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Default Mime type to format mapping
{ 'application/octet-stream' => :all, '*/*' => :all, 'text/html' => :html }.freeze
Instance Attribute Summary collapse
-
#action_module(value = nil) ⇒ Object
readonly
Specify which is the default action module to be included when we use the ‘Hanami::Controller.action` method.
-
#cookies(options = nil) ⇒ Object
readonly
Set default cookies options for all responses.
-
#default_charset(charset = nil) ⇒ Object
readonly
Set a charset as default fallback for all the requests without a strict requirement for the charset.
-
#default_headers(headers = nil) ⇒ Object
readonly
Set default headers for all responses.
-
#default_request_format(format = nil) ⇒ Object
readonly
Set a format as default fallback for all the requests without a strict requirement for the mime type.
-
#default_response_format(format = nil) ⇒ Object
readonly
Set a format to be used for all responses regardless of the request type.
-
#handle_exceptions(value = nil) ⇒ Object
Handle exceptions with an HTTP status or let them uncaught.
-
#modules ⇒ Array<Proc>
readonly
private
Return included modules.
Class Method Summary collapse
-
.for(base) ⇒ Hanami::Controller::Configuration
private
Return a copy of the configuration of the framework instance associated with the given class.
Instance Method Summary collapse
-
#copy!(base) ⇒ Object
private
Copy the configuration for the given action.
-
#duplicate ⇒ Hanami::Controller::Configuration
private
Duplicate by copying the settings in a new instance.
-
#exception_handler(exception) ⇒ Object
private
Return a callable handler for the given exception.
-
#exception_handler_for(exception) ⇒ Object
private
Finds configured handler for given exception, or nil if not found.
-
#format(hash) ⇒ Object
Register a format.
-
#format_for(mime_type) ⇒ Symbol?
private
Returns a format for the given mime type.
-
#handle_exception(exception) ⇒ Object
Specify how to handle an exception with an HTTP status.
-
#handled_exception?(exception) ⇒ Boolean
private
Check if the given exception is handled.
-
#initialize ⇒ Hanami::Controller::Configuration
constructor
Initialize a configuration instance.
-
#load! ⇒ Object
private
Load the framework.
-
#mime_type_for(format) ⇒ String?
private
Returns a mime type for the given format.
-
#mime_types ⇒ Object
private
Return the configured format’s MIME types.
-
#prepare(&blk) ⇒ void
Configure the logic to be executed when Hanami::Action is included This is useful to DRY code by having a single place where to configure shared behaviors like authentication, sessions, cookies etc.
-
#reset! ⇒ Object
private
Reset all the values to the defaults.
Constructor Details
#initialize ⇒ Hanami::Controller::Configuration
Initialize a configuration instance
102 103 104 |
# File 'lib/hanami/controller/configuration.rb', line 102 def initialize reset! end |
Instance Attribute Details
#action_module(value) ⇒ Object #action_module ⇒ Module
Specify which is the default action module to be included when we use the ‘Hanami::Controller.action` method.
This setting is useful when we use multiple instances of the framework in the same process, so we want to ensure that the actions will include ‘MyApp::Action`, rather than `AnotherApp::Action`.
If not set, the default value is ‘Hanami::Action`
This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.
298 299 300 301 302 303 304 |
# File 'lib/hanami/controller/configuration.rb', line 298 def action_module(value = nil) if value.nil? @action_module else @action_module = value end end |
#cookies(options = nil) ⇒ Object
Set default cookies options for all responses
By default this value is an empty hash.
598 599 600 601 602 603 604 605 606 |
# File 'lib/hanami/controller/configuration.rb', line 598 def ( = nil) if @cookies.merge!( .reject { |_, v| v.nil? } ) else @cookies end end |
#default_charset(charset = nil) ⇒ Object
Set a charset as default fallback for all the requests without a strict requirement for the charset.
By default this value is nil.
539 540 541 542 543 544 545 |
# File 'lib/hanami/controller/configuration.rb', line 539 def default_charset(charset = nil) if charset @default_charset = charset else @default_charset end end |
#default_headers(headers = nil) ⇒ Object
Set default headers for all responses
By default this value is an empty hash.
566 567 568 569 570 571 572 573 574 |
# File 'lib/hanami/controller/configuration.rb', line 566 def default_headers(headers = nil) if headers @default_headers.merge!( headers.reject {|_,v| v.nil? } ) else @default_headers end end |
#default_request_format(format) ⇒ Object #default_request_format ⇒ Symbol?
Set a format as default fallback for all the requests without a strict requirement for the mime type.
The given format must be coercible to a symbol, and be a valid mime type alias. If it isn’t, at the runtime the framework will raise a ‘Hanami::Controller::UnknownFormatError`.
By default this value is nil.
This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.
467 468 469 470 471 472 473 |
# File 'lib/hanami/controller/configuration.rb', line 467 def default_request_format(format = nil) if format @default_request_format = Utils::Kernel.Symbol(format) else @default_request_format end end |
#default_response_format(format) ⇒ Object #default_response_format ⇒ Symbol?
Set a format to be used for all responses regardless of the request type.
The given format must be coercible to a symbol, and be a valid mime type alias. If it isn’t, at the runtime the framework will raise a ‘Hanami::Controller::UnknownFormatError`.
By default this value is nil.
This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.
511 512 513 514 515 516 517 |
# File 'lib/hanami/controller/configuration.rb', line 511 def default_response_format(format = nil) if format @default_response_format = Utils::Kernel.Symbol(format) else @default_response_format end end |
#handle_exceptions(value) ⇒ Object #handle_exceptions ⇒ TrueClass, FalseClass
Handle exceptions with an HTTP status or let them uncaught
If this value is set to ‘true`, the configured exceptions will return the specified HTTP status, the rest of them with `500`.
If this value is set to ‘false`, the exceptions won’t be caught.
This is part of a DSL, for this reason when this method is called with an argument, it will set the corresponding instance variable. When called without, it will return the already set value, or the default.
153 154 155 156 157 158 159 |
# File 'lib/hanami/controller/configuration.rb', line 153 def handle_exceptions(value = nil) if value.nil? @handle_exceptions else @handle_exceptions = value end end |
#modules ⇒ Array<Proc>
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.
Return included modules
663 664 665 |
# File 'lib/hanami/controller/configuration.rb', line 663 def modules @modules end |
Class Method Details
.for(base) ⇒ Hanami::Controller::Configuration
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.
Return a copy of the configuration of the framework instance associated with the given class.
When multiple instances of Hanami::Controller are used in the same application, we want to make sure that a controller or an action will receive the expected configuration.
90 91 92 93 94 |
# File 'lib/hanami/controller/configuration.rb', line 90 def self.for(base) namespace = Utils::String.new(base).namespace framework = Utils::Class.load_from_pattern!("(#{namespace}|Hanami)::Controller") framework.configuration.duplicate end |
Instance Method Details
#copy!(base) ⇒ 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.
Copy the configuration for the given action
693 694 695 696 697 |
# File 'lib/hanami/controller/configuration.rb', line 693 def copy!(base) modules.each do |mod| base.class_eval(&mod) end end |
#duplicate ⇒ Hanami::Controller::Configuration
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.
Duplicate by copying the settings in a new instance.
640 641 642 643 644 645 646 647 648 649 650 651 652 653 |
# File 'lib/hanami/controller/configuration.rb', line 640 def duplicate Configuration.new.tap do |c| c.handle_exceptions = handle_exceptions c.handled_exceptions = handled_exceptions.dup c.action_module = action_module c.modules = modules.dup c.formats = formats.dup c.default_request_format = default_request_format c.default_response_format = default_response_format c.default_charset = default_charset c.default_headers = default_headers.dup c. = .dup end end |
#exception_handler(exception) ⇒ 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.
Return a callable handler for the given exception
194 195 196 |
# File 'lib/hanami/controller/configuration.rb', line 194 def exception_handler(exception) exception_handler_for(exception) || DEFAULT_ERROR_CODE end |
#exception_handler_for(exception) ⇒ 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.
Finds configured handler for given exception, or nil if not found.
219 220 221 222 223 224 225 |
# File 'lib/hanami/controller/configuration.rb', line 219 def exception_handler_for(exception) @handled_exceptions.each do |exception_class, handler| return handler if exception.kind_of?(exception_class) end nil end |
#format(hash) ⇒ Object
Register a format
409 410 411 412 413 414 |
# File 'lib/hanami/controller/configuration.rb', line 409 def format(hash) symbol, mime_type = *Utils::Kernel.Array(hash) @formats[Utils::Kernel.String(mime_type)] = Utils::Kernel.Symbol(symbol) @mime_types = nil end |
#format_for(mime_type) ⇒ Symbol?
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 a format for the given mime type
618 619 620 |
# File 'lib/hanami/controller/configuration.rb', line 618 def format_for(mime_type) @formats[mime_type] end |
#handle_exception(exception) ⇒ Object
Specify how to handle an exception with an HTTP status
Raised exceptions will return the configured HTTP status, only if
`handled_exceptions` is set on `true`.
181 182 183 184 |
# File 'lib/hanami/controller/configuration.rb', line 181 def handle_exception(exception) @handled_exceptions.merge!(exception) _sort_handled_exceptions! end |
#handled_exception?(exception) ⇒ Boolean
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.
Check if the given exception is handled.
206 207 208 209 |
# File 'lib/hanami/controller/configuration.rb', line 206 def handled_exception?(exception) handled_exceptions && !exception_handler_for(exception).nil? end |
#load! ⇒ 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.
Load the framework
703 704 705 |
# File 'lib/hanami/controller/configuration.rb', line 703 def load! freeze end |
#mime_type_for(format) ⇒ String?
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 a mime type for the given format
630 631 632 |
# File 'lib/hanami/controller/configuration.rb', line 630 def mime_type_for(format) @formats.key(format) end |
#mime_types ⇒ 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.
Return the configured format’s MIME types
423 424 425 426 427 428 |
# File 'lib/hanami/controller/configuration.rb', line 423 def mime_types @mime_types ||= begin ((@formats.keys - DEFAULT_FORMATS.keys) + ::Rack::Mime::MIME_TYPES.values).freeze end end |
#prepare(&blk) ⇒ void
This method returns an undefined value.
Configure the logic to be executed when Hanami::Action is included This is useful to DRY code by having a single place where to configure shared behaviors like authentication, sessions, cookies etc.
This method can be called multiple times.
349 350 351 352 353 354 355 |
# File 'lib/hanami/controller/configuration.rb', line 349 def prepare(&blk) if block_given? @modules.push(blk) else raise ArgumentError.new('Please provide a block') end end |
#reset! ⇒ 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.
Reset all the values to the defaults
669 670 671 672 673 674 675 676 677 678 679 680 681 |
# File 'lib/hanami/controller/configuration.rb', line 669 def reset! @handle_exceptions = true @handled_exceptions = {} @modules = [] @formats = DEFAULT_FORMATS.dup @mime_types = nil @default_request_format = nil @default_response_format = nil @default_charset = nil @default_headers = {} @cookies = {} @action_module = ::Hanami::Action end |