# 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