class SharkOnLambda::Middleware::JsonapiRescuer

Public Instance Methods

call!(env) click to toggle source
# File lib/shark_on_lambda/middleware/jsonapi_rescuer.rb, line 6
def call!(env)
  app.call(env)
rescue Errors::Base => e
  rescue_shark_error(e)
rescue StandardError => e
  rescue_standard_error(e)
end

Private Instance Methods

error_object(status, message) click to toggle source
# File lib/shark_on_lambda/middleware/jsonapi_rescuer.rb, line 16
def error_object(status, message)
  {
    status: status.to_s,
    title: Rack::Utils::HTTP_STATUS_CODES[status],
    detail: message
  }
end
error_response(status, headers, message) click to toggle source
# File lib/shark_on_lambda/middleware/jsonapi_rescuer.rb, line 24
def error_response(status, headers, message)
  body = {
    errors: [
      error_object(status, message)
    ]
  }.to_json

  response_body = Rack::BodyProxy.new([body]) do
    message.close if message.respond_to?(:close)
  end

  [status, headers, response_body]
end
rescue_shark_error(error) click to toggle source
# File lib/shark_on_lambda/middleware/jsonapi_rescuer.rb, line 38
def rescue_shark_error(error)
  status = error.status || 500
  error_response(status, {}, error.message)
end
rescue_standard_error(error) click to toggle source
# File lib/shark_on_lambda/middleware/jsonapi_rescuer.rb, line 43
def rescue_standard_error(error)
  SharkOnLambda.logger.error(error.message)
  SharkOnLambda.logger.error(error.backtrace.join("\n"))

  error_response(500, {}, error.message)
end