class Gaffe::ErrorsControllerResolver

Constants

BUILTIN_CONTROLLER

Constants

Attributes

controller[R]

Accessors

Public Class Methods

new(env) click to toggle source
# File lib/gaffe/errors_controller_resolver.rb, line 12
def initialize(env)
  @env = env
end

Public Instance Methods

resolved_controller() click to toggle source
# File lib/gaffe/errors_controller_resolver.rb, line 16
def resolved_controller
  # Use the configured controller first
  controller = Gaffe.configuration.errors_controller

  # Parse the request if multiple controllers are configured
  controller = request_controller(controller) if controller.is_a?(Hash)

  # Fall back on the builtin errors controller
  controller ||= BUILTIN_CONTROLLER.call

  # Make sure we return a Class
  controller.respond_to?(:constantize) ? controller.constantize : controller
end

Private Instance Methods

request_controller(controllers) click to toggle source
# File lib/gaffe/errors_controller_resolver.rb, line 32
def request_controller(controllers)
  matched_controllers = controllers.find do |pattern, _|
    relative_url = @env['REQUEST_URI']
    absolute_url = @env['HTTP_HOST'] + relative_url
    [relative_url, absolute_url].any? { |url| (url =~ pattern).present? }
  end
  matched_controllers.try(:last)
end