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:
parent
721c8a4355
commit
eeb32308db
3 changed files with 17 additions and 8 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue