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

support for property access yield from [], []=

This commit is contained in:
kares 2012-04-21 19:51:47 +02:00
parent 721c8a4355
commit eeb32308db
3 changed files with 17 additions and 8 deletions

View file

@ -9,7 +9,8 @@ module Rhino
def has(object, name, scope)
# try [](name) method :
if object.respond_to?(:'[]') && object.method(:'[]').arity == 1
return true unless object[name].nil?
value = object.[](name) { return true }
return true unless value.nil?
end
yield
end
@ -17,9 +18,12 @@ module Rhino
def get(object, name, scope)
# try [](name) method :
if object.respond_to?(:'[]') && object.method(:'[]').arity == 1
unless (value = object[name]).nil?
return Rhino.to_javascript(value, scope)
value = begin
object[name]
rescue LocalJumpError
nil
end
return Rhino.to_javascript(value, scope) unless value.nil?
end
yield
end
@ -27,7 +31,11 @@ module Rhino
def put(object, name, value)
# try []=(name, value) method :
if object.respond_to?(:'[]=') && object.method(:'[]=').arity == 2
return object[name] = Rhino.to_ruby(value)
rb_value = Rhino.to_ruby(value)
begin
return object[name] = rb_value
rescue LocalJumpError
end
end
yield
end

View file

@ -29,7 +29,8 @@ module Rhino
def put(object, name, value)
if object.respond_to?(set_name = :"#{name}=")
return object.send(set_name, Rhino.to_ruby(value))
rb_value = Rhino.to_ruby(value)
return object.send(set_name, rb_value)
end
super
end

View file

@ -4,7 +4,7 @@ module Rhino
def has(object, name, scope)
if object.respond_to?(name.to_s) ||
object.respond_to?("#{name}=")
object.respond_to?(:"#{name}=")
return true
end
super
@ -18,14 +18,14 @@ module Rhino
else
return Function.wrap(method.unbind)
end
elsif object.respond_to?("#{name}=")
elsif object.respond_to?(:"#{name}=")
return nil
end
super
end
def put(object, name, value)
if object.respond_to?(set_name = "#{name}=")
if object.respond_to?(set_name = :"#{name}=")
return object.send(set_name, Rhino.to_ruby(value))
end
super