mirror of
https://github.com/rubyjs/therubyracer
synced 2023-03-27 23:21:42 -04:00
invoke javascript methods from ruby. invoke javascript constructors from ruby.
This commit is contained in:
parent
7a656e8e46
commit
d46ff17315
2 changed files with 22 additions and 6 deletions
|
@ -2,19 +2,19 @@
|
|||
module V8
|
||||
class Object
|
||||
include Enumerable
|
||||
|
||||
|
||||
def initialize(native, context = nil)
|
||||
@native = native
|
||||
@context = context || C::Context::GetEntered()
|
||||
raise ScriptError, "V8::Object.new called without an open V8 context" unless @context
|
||||
end
|
||||
|
||||
|
||||
def [](key)
|
||||
@context.enter do
|
||||
To.ruby(@native.Get(To.v8(key)))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def []=(key, value)
|
||||
value.tap do
|
||||
@context.enter do
|
||||
|
@ -22,13 +22,13 @@ module V8
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def to_s
|
||||
@context.enter do
|
||||
To.rb(@native.ToString())
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def each
|
||||
@context.enter do
|
||||
for prop in To.rb(@native.GetPropertyNames())
|
||||
|
@ -36,6 +36,22 @@ module V8
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
def respond_to?(method)
|
||||
self[method] != nil
|
||||
end
|
||||
|
||||
def method_missing(name, *args, &block)
|
||||
return super(name, *args, &block) unless self.respond_to?(name)
|
||||
property = self[name]
|
||||
if property.kind_of?(V8::Function)
|
||||
property.methodcall(self, *args)
|
||||
elsif args.empty?
|
||||
property
|
||||
else
|
||||
raise ArgumentError, "wrong number of arguments (#{args.length} for 0)" unless args.empty?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 08ba26e9295d69c09ecc0ed76c1346b98e52a066
|
||||
Subproject commit 69c7cf355d38fda586f4eb1093b0043ecd9430c6
|
Loading…
Reference in a new issue