1
0
Fork 0
mirror of https://github.com/rubyjs/therubyrhino synced 2023-03-27 23:21:34 -04:00
therubyrhino/lib/rhino/context.rb

83 lines
1.7 KiB
Ruby
Raw Normal View History

2009-09-24 20:06:31 -04:00
module Rhino
def function(&impl)
Function.new &impl
end
class Context
class << self
def open
J::ContextFactory.new.call do |native|
yield new(native)
end
end
def open_std(options = {})
open do |cxt|
yield cxt, cxt.init_standard_objects(options)
end
end
2009-09-24 20:06:31 -04:00
private :new
end
def initialize(native) #:nodoc:
2009-09-24 20:06:31 -04:00
@native = native
end
def init_standard_objects(options = {})
NativeObject.new(@native.initStandardObjects(nil, options[:sealed] == true)).tap do |objects|
unless options[:java]
for package in ["Packages", "java", "org", "com"]
objects.j.delete(package)
end
end
2009-09-24 20:06:31 -04:00
end
end
2009-11-08 23:25:25 -05:00
def eval(str, scope = @native.initStandardObjects())
str = str.to_s
2009-09-24 20:06:31 -04:00
begin
To.ruby @native.evaluateString(To.javascript(scope), str, "<eval>", 1, nil)
2009-09-24 20:06:31 -04:00
rescue J::RhinoException => e
raise Rhino::RhinoError, e
end
end
def standard
yield @native.initStandardObjects()
end
end
2009-09-24 20:06:31 -04:00
class Function < J::BaseFunction
def initialize(callable = nil, &block)
super()
@block = callable || block
2009-09-24 20:06:31 -04:00
end
def call(cxt, scope, this, args)
@block.call(*(args.map {|a| To.ruby(a)}))
end
def to_json(*args)
'"[Native Function]"'
2009-09-24 20:06:31 -04:00
end
end
class RhinoError < StandardError
def initialize(native)
@native = native
end
def message
@native.cause.details
2009-09-24 20:06:31 -04:00
end
def javascript_backtrace
@native.getScriptStackTrace()
2009-09-24 20:06:31 -04:00
end
end
end