45ec0857创建于 2023年1月17日历史提交
From 084cf2ade353d3bf5f1a76aade87efd2f887bdd5 Mon Sep 17 00:00:00 2001
From: Jordan Owens <jkowens@gmail.com>            
Date: Thu, 31 Jan 2019 22:32:45 -0500            
Subject: [PATCH] Internal Sinatra errors now extend Sinatra::Error

---
 lib/sinatra/base.rb | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb
index f5d7729..aebd025 100644
--- a/lib/sinatra/base.rb
+++ b/lib/sinatra/base.rb
@@ -233,11 +233,14 @@ module Sinatra
     end
   end
 
-  class BadRequest < TypeError #:nodoc:
+  class Error < StandardError #:nodoc:
+  end
+
+  class BadRequest < Error #:nodoc:
     def http_status; 400 end
   end
 
-  class NotFound < NameError #:nodoc:
+  class NotFound < Error #:nodoc:
     def http_status; 404 end
   end
 
@@ -1114,15 +1117,16 @@ module Sinatra
       end
       @env['sinatra.error'] = boom
 
-      if boom.respond_to? :http_status
-        status(boom.http_status)
-      elsif settings.use_code? and boom.respond_to? :code and boom.code.between? 400, 599
-        status(boom.code)
-      else
-        status(500)
+      http_status = if boom.kind_of? Sinatra::Error
+        if boom.respond_to? :http_status
+          boom.http_status
+        elsif settings.use_code? && boom.respond_to?(:code)
+          boom.code
+        end
       end
 
-      status(500) unless status.between? 400, 599
+      http_status = 500 unless http_status && http_status.between?(400, 599)
+      status(http_status)
 
       boom_message = boom.message if boom.message && boom.message != boom.class.name
       if server_error?
-- 
2.27.0