Module: CfScript::Scope::Execution

Included in:
CfScript, Base
Defined in:
lib/cf_script/scope.rb

Class Method Summary collapse

Class Method Details

.exec_in(inner, *args, &block) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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