29 lines
783 B
Ruby
29 lines
783 B
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative '../middleware'
|
|
require_relative '../environment'
|
|
require_relative '../http/error'
|
|
|
|
module FO::Middleware
|
|
module ErrorHandler
|
|
extend FO::Middleware
|
|
|
|
def self.dispatch(request, response, app)
|
|
app.call(request.env)
|
|
rescue FO::HTTP::Error => e
|
|
response
|
|
.status(e.status)
|
|
.template('error', {status: e.status, message: e.message, error: e})
|
|
rescue => e
|
|
warn "Uncaught exception: #{e.message}"
|
|
warn e.backtrace
|
|
message = FO::Environment.is_prod? ?
|
|
'Something went very wrong ... please try again later.' :
|
|
e.message
|
|
response
|
|
.status(500)
|
|
.template('error', {status: 500, message: message, error: e})
|
|
end
|
|
end
|
|
end
|