jam-cloud/web/app/controllers/api_controller.rb

67 lines
2.0 KiB
Ruby
Raw Normal View History

class ApiController < ApplicationController
2012-10-27 22:26:45 +00:00
@@log = Logging.logger[ApiController]
# define common error handlers
rescue_from 'JamRuby::StateError' do |exception|
@exception = exception
render "errors/state_error", :status => 400
end
2012-11-22 08:27:00 +00:00
rescue_from 'JamRuby::JamArgumentError' do |exception|
@exception = exception
2012-11-22 08:27:00 +00:00
render "errors/jam_argument_error", :status => 400
end
rescue_from 'JamRuby::PermissionError' do |exception|
@exception = exception
2012-11-22 08:27:00 +00:00
render "errors/permission_error", :status => 403
end
rescue_from 'ActiveRecord::RecordNotFound' do |exception|
2012-10-27 22:26:45 +00:00
@@log.debug(exception)
render :json => { :errors => { :resource => ["record not found"] } }, :status => 404
end
2012-10-27 22:26:45 +00:00
rescue_from 'PG::Error' do |exception|
@@log.debug(exception)
if exception.to_s.include? "duplicate key value violates unique constraint"
render :json => { :errors => { :resource => ["resource already exists"] } }, :status => 409 # 409 = conflict
else
raise exception
end
end
2012-11-24 18:23:13 +00:00
2012-11-24 18:23:13 +00:00
protected
def respond_with_model(model, options = {})
if model.errors.any?
response.status = :unprocessable_entity
respond_with model
else
status = options[:new] && options[:new] == true ? 201 : 200
redirect_on_success = options[:location]
if redirect_on_success
location = redirect_on_success.call
raise "location must return something" unless location # development time error
respond_with model, responder: ApiResponder, status: status, location: location
else
respond_with model, responder: ApiResponder, status: status
end
end
end
2012-12-14 03:32:51 +00:00
def auth_user
unless current_user.id == params[:id]
2012-11-24 18:23:13 +00:00
raise PermissionError, ValidationMessages::PERMISSION_VALIDATION_ERROR
end
2012-12-14 03:32:51 +00:00
@user = User.find(params[:id])
2012-11-24 18:23:13 +00:00
end
def optional_auth_user
if current_user.nil?
@user = nil
else
auth_user
end
end
end