Module: KineticCafe::ErrorHandler
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/controllers/concerns/kinetic_cafe/error_handler.rb
Overview
A controller concern for KineticCafe::Error that rescues from KineticCafe::Error using #kinetic_cafe_error_handler. This handler can be redefined on a per-controller basis.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#kinetic_cafe_error_handler(error) ⇒ Object
This method is called with
error
when Rails catches a KineticCafe::Error descendant. -
#kinetic_cafe_error_log_error(error) ⇒ Object
Write the provided error to the Rails log using the value of #kinetic_cafe_error_handler_log_locale.
-
#kinetic_cafe_error_render_html(error) ⇒ Object
Render the
error
as HTML. -
#kinetic_cafe_error_render_json(error) ⇒ Object
Render the
error
as JSON.
Instance Method Details
#kinetic_cafe_error_handler(error) ⇒ Object
This method is called with error
when Rails catches a KineticCafe::Error descendant. It logs the message and its cause as severity error. After logging as error
, it will render to HTML or JSON. The received error is logged using the value of #kinetic_cafe_error_handler_log_locale.
HTML is rendered with #kinetic_cafe_error_render_html. JSON is rendered with #kinetic_cafe_error_render_json. Either of these can be overridden in controllers for different behaviour.
43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'app/controllers/concerns/kinetic_cafe/error_handler.rb', line 43 def kinetic_cafe_error_handler(error) kinetic_cafe_error_log_error(error) respond_to do |format| format.html do kinetic_cafe_error_render_html(error) end format.json do kinetic_cafe_error_render_json(error) end end end |
#kinetic_cafe_error_log_error(error) ⇒ Object
Write the provided error to the Rails log using the value of #kinetic_cafe_error_handler_log_locale. If the error has a cause, log that as well.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'app/controllers/concerns/kinetic_cafe/error_handler.rb', line 86 def kinetic_cafe_error_log_error(error) locale = self.class.kinetic_cafe_error_handler_log_locale Rails.logger.error(error.(locale)) return unless error.cause Rails.logger.error( t( 'kinetic_cafe_error.cause', message: error.cause., locale: locale ) ) end |
#kinetic_cafe_error_render_html(error) ⇒ Object
Render the error
as HTML. Uses the template kinetic_cafe_error/page
with error
passed as a local of the same name. The render status is set to error.status
.
59 60 61 62 |
# File 'app/controllers/concerns/kinetic_cafe/error_handler.rb', line 59 def kinetic_cafe_error_render_html(error) render template: 'kinetic_cafe_error/page', locals: { error: error }, status: error.status end |
#kinetic_cafe_error_render_json(error) ⇒ Object
Render the error
as JSON. If it is KineticCafe::Error#header_only?, only a head
of the error.status
is returned. Otherwise, the render is done with KineticCafe::Error#json_result.
If you are overriding this because you want to add or change #json_result, use #error_result as the value to the json
parameter.
def kinetic_cafe_error_render_json(error)
render status: error.status, layout: false, json: error.error_result,
content_type: 'application/hal+json'
end
75 76 77 78 79 80 81 |
# File 'app/controllers/concerns/kinetic_cafe/error_handler.rb', line 75 def kinetic_cafe_error_render_json(error) if error.header_only? head error.status else render error.json_result end end |