mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-04 04:57:51 +00:00 
			
		
		
		
	- Upgrade Sentry Libraries - Enable provision for account and user info in error tracking - Add ChatwootExceptionTracker fixes: #4375
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
module RequestExceptionHandler
 | 
						|
  extend ActiveSupport::Concern
 | 
						|
 | 
						|
  included do
 | 
						|
    rescue_from ActiveRecord::RecordInvalid, with: :render_record_invalid
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def handle_with_exception
 | 
						|
    yield
 | 
						|
  rescue ActiveRecord::RecordNotFound
 | 
						|
    render_not_found_error('Resource could not be found')
 | 
						|
  rescue Pundit::NotAuthorizedError
 | 
						|
    render_unauthorized('You are not authorized to do this action')
 | 
						|
  ensure
 | 
						|
    # to address the thread variable leak issues in Puma/Thin webserver
 | 
						|
    Current.reset
 | 
						|
  end
 | 
						|
 | 
						|
  def render_unauthorized(message)
 | 
						|
    render json: { error: message }, status: :unauthorized
 | 
						|
  end
 | 
						|
 | 
						|
  def render_not_found_error(message)
 | 
						|
    render json: { error: message }, status: :not_found
 | 
						|
  end
 | 
						|
 | 
						|
  def render_could_not_create_error(message)
 | 
						|
    render json: { error: message }, status: :unprocessable_entity
 | 
						|
  end
 | 
						|
 | 
						|
  def render_payment_required(message)
 | 
						|
    render json: { error: message }, status: :payment_required
 | 
						|
  end
 | 
						|
 | 
						|
  def render_internal_server_error(message)
 | 
						|
    render json: { error: message }, status: :internal_server_error
 | 
						|
  end
 | 
						|
 | 
						|
  def render_record_invalid(exception)
 | 
						|
    render json: {
 | 
						|
      message: exception.record.errors.full_messages.join(', '),
 | 
						|
      attributes: exception.record.errors.attribute_names
 | 
						|
    }, status: :unprocessable_entity
 | 
						|
  end
 | 
						|
 | 
						|
  def render_error_response(exception)
 | 
						|
    render json: exception.to_hash, status: exception.http_status
 | 
						|
  end
 | 
						|
end
 |