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