Module: RequestExceptionHandler
- Defined in:
- lib/request_exception_handler.rb
Overview
The mixin that provides the request_exception
by default included into ActionController::Base
Constant Summary collapse
- THREAD_LOCAL_NAME =
:_request_exception
- @@parse_request_parameters_exception_handler =
lambda do |request, exception| RequestExceptionHandler.store_request_exception(exception) request_body = request.respond_to?(:body) ? request.body : request.raw_post logger = RequestExceptionHandler.logger if logger.debug? content_log = request_body if request_body.is_a?(StringIO) pos = request_body.pos content_log = request_body.read end logger.debug "#{exception.class.name} occurred while parsing request parameters." << "\nContents:\n#{content_log}\n" request_body.pos = pos if pos elsif logger.info? logger.info "#{exception.class.name} occurred while parsing request parameters." end content_type = if request.respond_to?(:content_mime_type) request.content_mime_type elsif request.respond_to?(:content_type_with_parameters) request.send :content_type_with_parameters # (legacy) ActionController::AbstractRequest else request.content_type end { "body" => request_body, "content_type" => content_type, "content_length" => request.content_length } end
- @@parse_request_parameters_exception_logger =
nil
Class Method Summary collapse
- .included(base) ⇒ Object
-
.logger ⇒ Object
Retrieves the Rails logger.
-
.reset_request_exception ⇒ Object
Resets the current
request_exception
(to nil). -
.store_request_exception(exception) ⇒ Object
Resets the current
request_exception
(to nil).
Instance Method Summary collapse
-
#check_request_exception ⇒ Object
Checks and raises a
request_exception
(gets prepended as a before filter). -
#request_exception ⇒ Object
Retrieves and keeps track of the current request exception if any.
Class Method Details
.included(base) ⇒ Object
52 53 54 |
# File 'lib/request_exception_handler.rb', line 52 def self.included(base) base.prepend_before_filter :check_request_exception end |
.logger ⇒ Object
Retrieves the Rails logger.
45 46 47 48 49 50 |
# File 'lib/request_exception_handler.rb', line 45 def self.logger @@parse_request_parameters_exception_logger ||= defined?(Rails.logger) ? Rails.logger : defined?(RAILS_DEFAULT_LOGGER) ? RAILS_DEFAULT_LOGGER : Logger.new(STDERR) end |
.reset_request_exception ⇒ Object
Resets the current request_exception
(to nil).
57 58 59 |
# File 'lib/request_exception_handler.rb', line 57 def self.reset_request_exception store_request_exception nil end |
.store_request_exception(exception) ⇒ Object
Resets the current request_exception
(to nil).
64 65 66 |
# File 'lib/request_exception_handler.rb', line 64 def self.store_request_exception(exception) Thread.current.thread_variable_set THREAD_LOCAL_NAME, exception end |
Instance Method Details
#check_request_exception ⇒ Object
Checks and raises a request_exception
(gets prepended as a before filter).
94 95 96 97 98 |
# File 'lib/request_exception_handler.rb', line 94 def check_request_exception if e = request_exception raise e if e.is_a?(Exception) end end |
#request_exception ⇒ Object
Retrieves and keeps track of the current request exception if any.
69 70 71 72 73 74 |
# File 'lib/request_exception_handler.rb', line 69 def request_exception return @_request_exception if defined? @_request_exception @_request_exception = Thread.current.thread_variable_get(THREAD_LOCAL_NAME) RequestExceptionHandler.reset_request_exception @_request_exception end |