Writing an external DSL in Ruby