Programming Ruby: The Pragmatic Programmers' Guide, Second Edition