Ruby’s open classes allow you define and redefine behavior pretty much at will; unfortunately, almost every option comes with caveats.