Method: ActsAsRunnableCode::InstanceMethods#run_code

Defined in:
lib/acts_as_runnable_code.rb

#run_code(toplevel_object = nil, options = {}) ⇒ Object

Run the user’s code in the context of a toplevel_object The toplevel_object will be automatically wrapped and copied into the sandbox



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/acts_as_runnable_code.rb', line 10

def run_code(toplevel_object = nil, options = {})
  options[:timeout] ||= self.class.runnable_code_options[:timeout] 
  s = sandbox
  if toplevel_object
    s.set(:toplevel, ActsAsWrappedClass::WrapperFinder.find_wrapper_for(toplevel_object))
    s.set(:code, self.send(self.class.source_code_field))
    result = s.eval("eval(code, toplevel.send(:binding))", options)
  else
    s.set(:code, self.send(self.class.source_code_field))        
    result = s.eval("eval(code)", options)
  end
  result.class.respond_to?(:wrapper_class?) && result.class.wrapper_class? ? result._wrapped_object : result
end