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