stop metaprogramming :)
seriously metaprograming is nice and cool but usually leads to mistakes 
if you are not expirienced programmer and don't have good imagination :)

try adding () here:
def #{name} &b => def #{name}(&b)

and you forgot to add "" here:
@chain = #{name}

should be:
@chain = '#{name}'

way you did it you made something like:

def raz &b
   @chain = raz
   .....

so method tried to run itself inifinitelly

next time try to "puts" or "p" your method before evaling it