app/controllers/exception_handler/exceptions_controller.rb
module ExceptionHandler
class ExceptionsController < ApplicationController
# => Response
# => http://www.justinweiss.com/articles/respond-to-without-all-the-pain/
respond_to :html, :js, :json, :xml
# => CSRF
protect_from_forgery
# => Devise
# => http://stackoverflow.com/a/38531245/1143732
skip_before_action :authenticate_user!, raise: false
##################################
##################################
# => Definitions
# => Exception model (tied to DB)
before_action { |e| @exception = ExceptionHandler::Exception.new request: e.request }
before_action { @exception.save if @exception.valid? && ExceptionHandler.config.try(:db) }
# => Response format (required for non-standard formats (.css / .gz etc))
# => request.format required until responders updates with wildcard / failsafe (:all)
before_action { |e| e.request.format = :html unless self.class.respond_to.include? e.request.format }
# => Routes
# => Removes need for "main_app" prefix in routes
# => http://stackoverflow.com/a/40251516/1143732
helper Rails.application.routes.url_helpers
# => Layout
# => Layouts only 400 / 500 because they are the only error responses (300 is redirect)
# => http://guides.rubyonrails.org/layouts_and_rendering.html#the-status-option
# => Layout proc kills "nil" inheritance, needs to be method for now
layout :layout
####################
# Actions #
####################
# => General Show Functionality
# => Introduced new "action" config option in 0.8.0.0
def show
respond_with @exception, status: @exception.status
end
##################################
##################################
private
# => Pulls from Exception class
# => Spanner in the works is nil
# => .present? validates against empty strings (IE a string is present)
# => .nil? validates to see if the returned data is "nil"
# => nil required to facilitate inheritance of the layout w/ ApplicationController
def layout option = ExceptionHandler.config.options(@exception.status, :layout)
(option.present? || option.nil?) ? option : 'exception'
end
##################################
##################################
end
end