class ExecJS::DuktapeRuntime::Context
Public Class Methods
new(runtime, source = "", options = {})
click to toggle source
# File lib/execjs/duktape_runtime.rb, line 7 def initialize(runtime, source = "", options = {}) @ctx = Duktape::Context.new(complex_object: nil) @ctx.exec_string(encode(source), '(execjs)') rescue Exception => e raise wrap_error(e) end
Public Instance Methods
call(identifier, *args)
click to toggle source
# File lib/execjs/duktape_runtime.rb, line 28 def call(identifier, *args) @ctx.call_prop(identifier.split("."), *args) rescue Exception => e raise wrap_error(e) end
eval(source, options = {})
click to toggle source
# File lib/execjs/duktape_runtime.rb, line 21 def eval(source, options = {}) return unless /\S/ =~ source @ctx.eval_string("(#{encode(source)})", '(execjs)') rescue Exception => e raise wrap_error(e) end
exec(source, options = {})
click to toggle source
# File lib/execjs/duktape_runtime.rb, line 14 def exec(source, options = {}) return unless /\S/ =~ source @ctx.eval_string("(function(){#{encode(source)}})()", '(execjs)') rescue Exception => e raise wrap_error(e) end
Private Instance Methods
wrap_error(e)
click to toggle source
# File lib/execjs/duktape_runtime.rb, line 35 def wrap_error(e) klass = case e when Duktape::SyntaxError RuntimeError when Duktape::Error ProgramError when Duktape::InternalError RuntimeError end if klass re = / \(line (\d+)\)$/ lineno = e.message[re, 1] || 1 error = klass.new(e.message.sub(re, "")) error.set_backtrace(["(execjs):#{lineno}"] + e.backtrace) error else e end end