module CfScript::Scope::Execution

Public Instance Methods

exec_in(inner, *args, &block) click to toggle source
# File lib/cf_script/scope.rb, line 5
def exec_in(inner, *args, &block)
  outer = eval('self', block.binding)
  outer = CfScript::Scope::Root.new if outer.class == Object

  inner_proxy = CfScript::Scope::Proxy.new(inner, outer)

  begin
    outer.instance_variables.each do |var|
      val = outer.instance_variable_get(var)
      inner_proxy.instance_variable_set(var, val)
    end

    inner_proxy.instance_exec(*args, &block)
  ensure
    outer.instance_variables.each do |var|
      val = inner_proxy.instance_variable_get(var)
      outer.instance_variable_set(var, val)
    end
  end
end