Sha256: 52c8a416a6acb9b64653f97579e8fe851f174e9849e500d7168b600c851e908d

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

class Wref::Implementations::IdClassUnique
  def initialize(object)
    @id = object.__id__
    @class_name = object.class.name.to_sym
    ObjectSpace.define_finalizer(object, method(:destroy))
    @unique_id = object.__wref_unique_id__ if object.respond_to?(:__wref_unique_id__)
  end

  def get!
    object = get
    raise ::Wref::Recycled unless object
    return object
  end

  def get
    return nil if !@class_name || !@id
    object = ObjectSpace._id2ref(@id)

    #Some times this class-name will be nil for some reason - knj
    object_class_name = object.class.name

    if !object_class_name || @class_name != object_class_name.to_sym || @id != object.__id__
      destroy
      return nil
    end

    if @unique_id
      destroy
      return nil if !object.respond_to?(:__wref_unique_id__) || object.__wref_unique_id__ != @unique_id
    end

    return object
  end

  def alive?
    if get
      return true
    else
      return false
    end
  end

private

  def destroy(*args)
    @id = nil
    @class_name = nil
    @unique_id = nil
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wref-0.0.7 lib/wref/implementations/id_class_unique.rb