Issue #9376 has been reported by jemc (Joe McIlvain). ---------------------------------------- Bug #9376: Passing do/end block inside decorated method fails, while passing {} block works. https://bugs.ruby-lang.org/issues/9376 Author: jemc (Joe McIlvain) Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: 2.1.0-p0 Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN Since method def returns the symbol in 2.1, it opens the door for a decorator pattern in which the method def is the argument to a method. This currently works, unless the method happens to call another method and pass it a do/end block. However, using {} instead causes no syntax error. Here is the code to reproduce: ``` def foo(meth); end x = Object.new foo def bar(arg) x.tap { } #=> (no problem here) x.tap do end #=> syntax error, unexpected keyword_do_block, expecting keyword_end (SyntaxError) end ``` -- http://bugs.ruby-lang.org/