All method calls in the block are handled by method_missing, which passes the outer self, attribute method name, and block to a new DSL class.
method_missing is used here because potentially any method name could be used. In general, you should only use method_missing if any possible method name is valid.