Sha256: b2199ed52e2501e008e05e05e47fe2ce88840a30f59545259d848820bb454c1d

Contents?: true

Size: 678 Bytes

Versions: 2

Compression:

Stored size: 678 Bytes

Contents

class Rack::App::ErrorHandler

  def initialize
    @handlers = {}
  end

  def register_handler(exception_classes, handler_block)
    exception_classes.each do |exception_class|
      @handlers[exception_class]= handler_block
    end
    nil
  end

  def execute_with_error_handling
    yield
  rescue *[Exception, @handlers.keys].flatten => ex
    get_handler(ex).call(ex)
  end

  protected

  def get_handler(ex)
    explicit(ex) || parent(ex) || raise(ex)
  end

  def explicit(ex)
    @handlers[ex.class]
  end

  def parent(ex)
    handler = @handlers.find { |exception_class, handler| ex.class <= exception_class }
    return handler.nil? ? nil : handler.last
  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rack-app-0.14.0 lib/rack/app/error_handler.rb
rack-app-0.13.0 lib/rack/app/error_handler.rb