class V8::Weak::WeakValueMap

def self.ensure_cleanup(values,key,ref)

def self.ensure_cleanup(values,key,ref)
  proc {
    values.delete(key) if values[key] == ref
  }
end

def [](key)

def [](key)
  if ref = @values[key]
    ref.object
  end
end

def []=(key, value)

def []=(key, value)
  ref = V8::Weak::Ref.new(value)
  ObjectSpace.define_finalizer(value, self.class.ensure_cleanup(@values, key, ref))
  @values[key] = ref
end

def initialize

def initialize
  @values = {}
end