examples from Practical Object Oriented Design in Ruby by Sandi Metz