class PryRescue::RSpec

def self.after(example)

def self.after(example)
  e = example.exception
  Pry::rescued(e) if e
end

def self.after_filters

def self.after_filters
  @after_filters ||= []
end

def self.after_outside

def self.after_outside
  after_filters.each(&:call)
end

def self.before

def self.before
  monkeypatch_capybara if defined?(Capybara)
end

def self.monkeypatch_capybara

tests probably want to see the page that failed.
The after filter navigates to 'about:blank', but people debugging

Shunt Capybara's after filter from before Pry::rescued to after.
def self.monkeypatch_capybara
  unless Capybara.respond_to?(:reset_sessions_after_rescue!)
    class << Capybara
      alias_method :reset_sessions_after_rescue!, :reset_sessions!
      def reset_sessions!
        return if Capybara.raise_server_errors
        session_pool.reverse_each do |_mode, session|
          session.server.reset_error!
        end
      end
    end
    after_filters << Capybara.method(:reset_sessions_after_rescue!)
  end
end

def self.run(example)

`example` is a RSpec::Core::Example::Procsy

Takes care to ensure that `try-again` will work.

Run an Rspec example within Pry::rescue{ }.
def self.run(example)
  Pry::rescue do
    begin
      before
      example.example.instance_variable_set(:@exception, nil)
      example.example_group_instance.instance_variable_set(:@__init_memoized, true)
      example.run
      # Rescued will be called in :after hook, which is ran before the second
      # :around leg
    ensure
      after_outside
    end
  end
end

def reset_sessions!

def reset_sessions!
  return if Capybara.raise_server_errors
  session_pool.reverse_each do |_mode, session|
    session.server.reset_error!
  end
end