 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Rerunning after an Exception (written by Steve Arneil) | ||
|---|---|---|
| Code | Expected | Actual | 
| def rescue_and_retry
  error_fixed = false
  begin
    puts 'I am before the raise in the begin block.'
    raise 'An error has occurred!' unless error_fixed
    puts 'I am after the raise in the begin block.'
  rescue
    puts 'An exception was thrown! Retrying...'
    error_fixed = true
    retry    
  end
  puts 'I am after the begin block.'
end
rescue_and_retry | I am before the raise in the begin block. An exception was thrown! Retrying... I am before the raise in the begin block. I am after the raise in the begin block. I am after the begin block. | I am before the raise in the begin block. An exception was thrown! Retrying... I am before the raise in the begin block. I am after the raise in the begin block. I am after the begin block. | 
| require 'open-uri'
def check_connection(max_tries=2, url='http://www.ruby-lang.org/')
  tries = 0
  begin
    tries += 1
    puts 'Checking connection...'
    open(url) { puts 'Connection OK.' }
  rescue Exception
    puts 'Connection not OK!'
    retry unless tries >= max_tries
  end
end
check_connection | Checking connection... Connection OK. | Checking connection... Connection OK. | 
| check_connection(2, 'http://this.is.a.fake.url/') | Checking connection... Connection not OK! Checking connection... Connection not OK! | Checking connection... Connection not OK! Checking connection... Connection not OK! |