Exceptional Failure
In this short season, we are going through EXceptional Ruby by Advi Grimm
What is a failure?
Let's talk about some definitions first:
- Exception - the occurrence of an abnormal condition during the execution of a software element.
- Failure - the inability of a software element to satisfy its purpose
- Error - the presence in the software of some element not satisfying its specification
"Failures cause exceptions which are due to errors"
- Failures - methods are thought to be designed to fulfill a contract. when they don't fulfill the contract, they fail
The life-cycle of an exception
- Exceptions are raised with either the raiseorfailmethods
- In Ruby, we signal failures with exceptions
🗣 Discussion: When do you find yourself using raise?
🗣 Discussion: When do you find yourself using rescue?
- The rescueclause should be a short sequence of simple instructions designed to bring the object back to a stable state and to either retry the operation or terminate with a failure
syntax
- 
Starts with the rescuekeyword, followed by one or more classes or modules to match, then a hash rocket and the variable name to which the matching exception will be assigned
- 
Subsequent lines of code up to an endkeyword will be executed if therescueis matchedrescue IOError => e 
 puts "Error while writing to file: #{e.message}"
 end
Moar Code
begin
  raise RuntimeError, 'specific error'
rescue StandardError => error
  puts "Generic error handler: #{error.inspect}"
rescue RuntimeError => error
  puts "runtime error handler: #{error.inspect}"
end
- Order matters when stacking multiple rescue clauses. the RuntimeError rescue block will never execute!
🗣 Discussion: Have you ever used retry?
tries = 0
begin
  tries += 1
  puts "trying #{tries}"
  raise
rescue
  retry if tries < 3
  puts 'I give up'
end
- Ruby gives you the power to retry
- I can see how this might be useful for making API calls
- Be super careful that your 'giving up' criteria will eventually be met
- Retry is nice for things that are unreliable
Picks:
JP: Overcast https://overcast.fm/
John: Apple Refurbished


