Retain scope when rewriting block source with instance_eval

success.rb works by using the block as is. self.instance_eval &block

I’m rewriting the block source code using ruby2ruby and then passing
that as a string to self.instance_eval. fail.rb contains the simple
failure case. The ary var is out of scope.

Is there a way to retain the
original scope of the block? I want to pass a string to instance_eval
and eval it within the scope of the block.


instance_eval by definition evaluates within the scope of the
receiving instance. You don’t need that here. You could just use eval
with a binding:

eval %(ary << 1; puts 'complete'), block.binding


That works. Thank you!