Skip to content

Commit 87abe81

Browse files
committed
Merge pull request #540 from cerebris/controller_errors
Translate exceptions arrising in the ActsAsResourceController code in…
2 parents bbd4138 + 4a02b37 commit 87abe81

File tree

4 files changed

+34
-4
lines changed

4 files changed

+34
-4
lines changed

lib/jsonapi/acts_as_resource_controller.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,10 @@ def handle_exceptions(e)
178178
case e
179179
when JSONAPI::Exceptions::Error
180180
render_errors(e.errors)
181-
else # raise all other exceptions
182-
# :nocov:
183-
fail e
184-
# :nocov:
181+
else
182+
internal_server_error = JSONAPI::Exceptions::InternalServerError.new(e)
183+
Rails.logger.error { "Internal Server Error: #{e.message} #{e.backtrace.join("\n")}" }
184+
render_errors(internal_server_error.errors)
185185
end
186186
end
187187

test/controllers/controller_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3270,4 +3270,13 @@ def test_get_namespaced_model_matching_resource
32703270
assert_response :success
32713271
assert_equal 'customers', json_response['data'][0]['type']
32723272
end
3273+
end
3274+
3275+
class Api::V7::CategoriesControllerTest < ActionController::TestCase
3276+
def test_uncaught_error_in_controller
3277+
3278+
get :show, {id: '1'}
3279+
assert_response 500
3280+
assert_match /Internal Server Error/, json_response['errors'][0]['detail']
3281+
end
32733282
end

test/fixtures/active_record.rb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,15 @@ class SubSpecialError < PostsController::SpecialError; end
565565
head :forbidden
566566
end
567567

568+
def handle_exceptions(e)
569+
case e
570+
when PostsController::SpecialError
571+
raise e
572+
else
573+
super(e)
574+
end
575+
end
576+
568577
#called by test_on_server_error
569578
def self.set_callback_message(error)
570579
@callback_message = "Sent from method"
@@ -758,6 +767,9 @@ class LineItemsController < JSONAPI::ResourceController
758767
class OrderFlagsController < JSONAPI::ResourceController
759768
end
760769

770+
class CategoriesController < JSONAPI::ResourceController
771+
end
772+
761773
class ClientsController < JSONAPI::ResourceController
762774
end
763775
end
@@ -1406,6 +1418,14 @@ class ClientResource < JSONAPI::Resource
14061418
has_many :purchase_orders
14071419
end
14081420

1421+
class CategoryResource < CategoryResource
1422+
attribute :name
1423+
1424+
# Raise exception for failure in controller
1425+
def name
1426+
fail "Something Exceptional Happened"
1427+
end
1428+
end
14091429
end
14101430

14111431
module V8

test/test_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ class CatResource < JSONAPI::Resource
229229
jsonapi_resources :customers
230230
jsonapi_resources :purchase_orders
231231
jsonapi_resources :line_items
232+
jsonapi_resources :categories
232233

233234
jsonapi_resources :clients
234235
end

0 commit comments

Comments
 (0)