class ExecJS::NashornRuntime::Context
Public Class Methods
new(_, source = nil, _ = nil)
click to toggle source
# File lib/nashorn/execjs/runtime.rb, line 8 def initialize(_, source = nil, _ = nil) source = encode(source) if source @nashorn_context = ::Nashorn::Context.new @nashorn_context.eval(source) if source rescue Exception => e raise wrap_error(e) end
Public Instance Methods
call(prop, *args)
click to toggle source
# File lib/nashorn/execjs/runtime.rb, line 28 def call(prop, *args) # evaled = @nashorn_context.eval(prop) # unbox evaled.call(*args) #rescue Exception => e # raise wrap_error(e) eval "#{prop}.apply(this, #{::JSON.generate(args)})" end
eval(source, _ = nil)
click to toggle source
# File lib/nashorn/execjs/runtime.rb, line 21 def eval(source, _ = nil) # options not used source = encode(source) unbox @nashorn_context.eval("(#{source})") if /\S/ =~ source rescue Exception => e raise wrap_error(e) end
exec(source, options = nil)
click to toggle source
# File lib/nashorn/execjs/runtime.rb, line 16 def exec(source, options = nil) # options not used source = encode(source) eval "(function(){#{source}})()", options if /\S/ =~ source end
unbox(value)
click to toggle source
# File lib/nashorn/execjs/runtime.rb, line 36 def unbox(value) value = ::Nashorn::to_rb(value, false) # ExecJS likes its own way : if value.is_a?(::Nashorn::JS::JSObject) return nil if value.isFunction return value.values.map { |v| unbox(v) } if value.isArray hash = {}; value.each_raw do |key, val| next if val.respond_to?(:isFunction) && val.isFunction hash[key] = unbox(val) end return hash end value end
wrap_error(e)
click to toggle source
# File lib/nashorn/execjs/runtime.rb, line 51 def wrap_error(e) return e unless e.is_a?(::Nashorn::JSError) error_class = ::Nashorn::JSError.parse_error?(e.cause) ? RuntimeError : ProgramError backtrace = e.backtrace if js_stack = e.javascript_backtrace backtrace = backtrace - js_stack # ["<<eval>>.<anonymous>(<eval>:1)", "<<eval>>.<program>(<eval>:1)"] js_stack = js_stack.map { |line| line.sub(/\<eval\>\:/, "(execjs):") } backtrace = js_stack + backtrace elsif backtrace backtrace = backtrace.dup; backtrace.unshift('(execjs):1') end error = error_class.new e.value ? e.value.to_s : e.message error.set_backtrace(backtrace) error end