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