diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb
index 70b62e9d..e9e6609e 100644
--- a/lib/sinatra/base.rb
+++ b/lib/sinatra/base.rb
@@ -725,7 +725,6 @@ module Sinatra
@env['sinatra.error'] = boom
dump_errors!(boom) if settings.dump_errors?
- raise boom if settings.show_exceptions?
@response.status = 500
if res = error_block!(boom.class)
@@ -750,6 +749,7 @@ module Sinatra
end
end
end
+ raise boom if settings.show_exceptions? and keys == Exception
nil
end
diff --git a/test/settings_test.rb b/test/settings_test.rb
index 821376c2..1a33492b 100644
--- a/test/settings_test.rb
+++ b/test/settings_test.rb
@@ -202,6 +202,29 @@ class SettingsTest < Test::Unit::TestCase
assert body.include?("StandardError")
assert body.include?("show_exceptions
setting")
end
+
+ it 'does not override app-specified error handling' do
+ klass = Sinatra.new(Sinatra::Application)
+ mock_app(klass) {
+ enable :show_exceptions
+
+ error RuntimeError do
+ 'Big mistake !'
+ end
+
+ get '/' do
+ raise RuntimeError
+ end
+ }
+
+ get '/'
+ assert_equal 500, status
+
+ assert ! body.include?("")
+ assert body.include? "Big mistake !"
+
+ end
+
end
describe 'dump_errors' do