Module: RequestExceptionHandler

Defined in:
lib/request_exception_handler.rb

Constant Summary collapse

@@parse_request_parameters_exception_handler =
lambda do |request, exception|
  Thread.current[:request_exception] = exception
  request_body = request.respond_to?(:body) ? request.body : request.raw_post
   logger = RequestExceptionHandler.logger
  if logger.info?
    content_log = request_body
    if request_body.is_a?(StringIO)
      pos = request_body.pos
      content_log = request_body.read
    end
    logger.info "#{exception.class.name} occurred while parsing request parameters." +
                "\nContents:\n#{content_log}\n"
    request_body.pos = pos if pos
  end
            
  content_type = if request.respond_to?(:content_type_with_parameters)
    request.send :content_type_with_parameters # AbstractRequest
  else # rack request
    request.respond_to?(:content_mime_type) ? request.content_mime_type : request.content_type
  end
  { "body" => request_body, "content_type" => content_type, "content_length" => request.content_length }
end

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



40
41
42
# File 'lib/request_exception_handler.rb', line 40

def self.included(base)
  base.prepend_before_filter :check_request_exception
end

.logger ⇒ Object



34
35
36
37
38
# File 'lib/request_exception_handler.rb', line 34

def self.logger
  defined?(Rails.logger) ? Rails.logger : 
    defined?(RAILS_DEFAULT_LOGGER) ? RAILS_DEFAULT_LOGGER : 
      Logger.new($stderr)
end

.reset_request_exception ⇒ Object



30
31
32
# File 'lib/request_exception_handler.rb', line 30

def self.reset_request_exception
  Thread.current[:request_exception] = nil
end

Instance Method Details

#check_request_exception ⇒ Object



44
45
46
47
# File 'lib/request_exception_handler.rb', line 44

def check_request_exception
  e = request_exception
  raise e if e && e.is_a?(Exception)
end

#request_exception ⇒ Object



49
50
51
52
53
54
# File 'lib/request_exception_handler.rb', line 49

def request_exception
  return @_request_exception if defined? @_request_exception
  @_request_exception = Thread.current[:request_exception]
  RequestExceptionHandler.reset_request_exception
  @_request_exception
end