Practical Object-Oriented Design in Ruby: An Agile Primer (Addison-Wesley Professional Ruby Series)