lib/rage/application.rb in rage-rb-0.6.0 vs lib/rage/application.rb in rage-rb-0.7.0

- old
+ new

@@ -1,10 +1,11 @@ # frozen_string_literal: true class Rage::Application def initialize(router) @router = router + @exception_app = build_exception_app end def call(env) init_logger @@ -15,14 +16,15 @@ handler[:handler].call(env, params) else [404, {}, ["Not Found"]] end + rescue Rage::Errors::BadRequest => e + response = @exception_app.call(400, e) + rescue Exception => e - exception_str = "#{e.class} (#{e.message}):\n#{e.backtrace.join("\n")}" - Rage.logger.error(exception_str) - response = [500, {}, [exception_str]] + response = @exception_app.call(500, e) ensure finalize_logger(env, response, params) end @@ -47,7 +49,23 @@ ).round(2) logger[:final] = { env:, params:, response:, duration: } Rage.logger.info("") logger[:final] = nil + end + + def build_exception_app + if Rage.env.development? + ->(status, e) do + exception_str = "#{e.class} (#{e.message}):\n#{e.backtrace.join("\n")}" + Rage.logger.error(exception_str) + [status, {}, [exception_str]] + end + else + ->(status, e) do + exception_str = "#{e.class} (#{e.message}):\n#{e.backtrace.join("\n")}" + Rage.logger.error(exception_str) + [status, {}, []] + end + end end end