diff options
author | Robin Houston <robin.houston@gmail.com> | 2012-09-04 16:23:03 +0100 |
---|---|---|
committer | Robin Houston <robin.houston@gmail.com> | 2012-09-04 16:23:03 +0100 |
commit | 9839e0e23ba78b405779b1a9c9d1e41f02991ebd (patch) | |
tree | d07209a4ad2003111c03948d537127d40dda9799 /app/controllers/api_controller.rb | |
parent | 62a20d6696275a6f83ca4cf835c487873ca89c99 (diff) |
API errors should be JSON
The API was returning Rails (HTML) errors for certain error
conditions, which is inconvenient because it makes it difficult
for the client to extract the error message.
This patch changes add_correspondence to return JSON errors
(still with suitable HTTP status codes) for two common exceptional
conditions, and adds tests.
Diffstat (limited to 'app/controllers/api_controller.rb')
-rw-r--r-- | app/controllers/api_controller.rb | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 718c31e6f..6c98ebeba 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -72,7 +72,12 @@ class ApiController < ApplicationController end def add_correspondence - request = InfoRequest.find(params[:id]) + request = InfoRequest.find_by_id(params[:id]) + if request.nil? + render :json => { "errors" => ["Could not find request #{params[:id]}"] }, :status => 404 + return + end + json = ActiveSupport::JSON.decode(params[:correspondence_json]) attachments = params[:attachments] @@ -83,11 +88,13 @@ class ApiController < ApplicationController errors = [] if !request.is_external? - raise ActiveRecord::RecordNotFound.new("Request #{params[:id]} cannot be updated using the API") + render :json => { "errors" => ["Request #{params[:id]} cannot be updated using the API"] }, :status => 500 + return end if request.public_body_id != @public_body.id - raise ActiveRecord::RecordNotFound.new("You do not own request #{params[:id]}") + render :json => { "errors" => ["You do not own request #{params[:id]}"] }, :status => 500 + return end if !["request", "response"].include?(direction) |