class RKelly::JS::Base

Attributes

properties[R]
return[R]
value[R]

Public Class Methods

new() click to toggle source
# File lib/rkelly/js/base.rb, line 5
def initialize
  @properties = Hash.new { |h,k|
    h[k] = Property.new(k, :undefined, self)
  }
  @return     = nil
  @returned   = false
  @value      = self
  self['Class'] = self.class.to_s.split('::').last
end

Public Instance Methods

[](name) click to toggle source
# File lib/rkelly/js/base.rb, line 15
def [](name)
  return self.properties[name] if has_property?(name)
  if self.properties['prototype'].value != :undefined
    self.properties['prototype'].value[name]
  else
    RKelly::Runtime::UNDEFINED
  end
end
[]=(name, value) click to toggle source
# File lib/rkelly/js/base.rb, line 24
def []=(name, value)
  return unless can_put?(name)
  if has_property?(name)
    self.properties[name].value = value
  else
    self.properties[name] = Property.new(name, value, self)
  end
end
can_put?(name) click to toggle source
# File lib/rkelly/js/base.rb, line 33
def can_put?(name)
  if !has_property?(name)
    return true if self.properties['prototype'].nil?
    return true if self.properties['prototype'].value.nil?
    return true if self.properties['prototype'].value == :undefined
    return self.properties['prototype'].value.can_put?(name)
  end
  !self.properties[name].read_only?
end
default_value(hint) click to toggle source
# File lib/rkelly/js/base.rb, line 58
def default_value(hint)
  case hint
  when 'Number'
    value_of = self['valueOf']
    if value_of.function || value_of.value.is_a?(RKelly::JS::Function)
      return value_of
    end
    to_string = self['toString']
    if to_string.function || to_string.value.is_a?(RKelly::JS::Function)
      return to_string
    end
  end
end
delete(name) click to toggle source
# File lib/rkelly/js/base.rb, line 51
def delete(name)
  return true unless has_property?(name)
  return false if self.properties[name].dont_delete?
  self.properties.delete(name)
  true
end
has_property?(name) click to toggle source
# File lib/rkelly/js/base.rb, line 43
def has_property?(name)
  return true if self.properties.has_key?(name)
  return false if self.properties['prototype'].nil?
  return false if self.properties['prototype'].value.nil?
  return false if self.properties['prototype'].value == :undefined
  self.properties['prototype'].value.has_property?(name)
end
return=(value) click to toggle source
# File lib/rkelly/js/base.rb, line 72
def return=(value)
  @returned = true
  @return = value
end
returned?() click to toggle source
# File lib/rkelly/js/base.rb, line 77
def returned?; @returned; end

Private Instance Methods

unbound_method(name, object_id = nil, &block) click to toggle source
# File lib/rkelly/js/base.rb, line 80
def unbound_method(name, object_id = nil, &block)
  name = "#{name}_#{self.class.to_s.split('::').last}_#{object_id}"
  unless RKelly::JS::Base.instance_methods.include?(name.to_sym)
    RKelly::JS::Base.class_eval do
      define_method(name, &block)
    end
  end
  RKelly::JS::Base.instance_method(name)
end