123456789_123456789_123456789_123456789_123456789_

Class: ActiveSupport::DescendantsTracker::DescendantsArray

Do not use. This class is for internal use only.
Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
Inherits: Object
Defined in: activesupport/lib/active_support/descendants_tracker.rb

Overview

DescendantsArray is an array that contains weak references to classes. Note: DescendantsArray is redundant with WeakSet, however WeakSet when used on Ruby 2.7 or 3.0 can trigger a Ruby crash: bugs.ruby-lang.org/issues/18928

Class Method Summary

Instance Attribute Summary

::Enumerable - Included

#many?

Returns true if the enumerable has more than 1 element.

Instance Method Summary

::Enumerable - Included

#compact_blank

Returns a new ::Array without the blank items.

#exclude?

The negative of the Enumerable#include?.

#excluding

Returns a copy of the enumerable excluding the specified elements.

#in_order_of

Returns a new ::Array where the order has been set to that provided in the series, based on the key of the objects in the original enumerable.

#including

Returns a new array that includes the passed elements.

#index_by

Convert an enumerable to a hash, using the block result as the key and the element as the value.

#index_with

Convert an enumerable to a hash, using the element as the key and the block result as the value.

#maximum

Calculates the maximum from the extracted elements.

#minimum

Calculates the minimum from the extracted elements.

#pick

Extract the given key from the first element in the enumerable.

#pluck

Extract the given key from each element in the enumerable.

#sole

Returns the sole item in the enumerable.

#without
#as_json

::ActiveSupport::EnumerableCoreExt::Constants - Included

Constructor Details

.newDescendantsArray

[ GitHub ]

  
# File 'activesupport/lib/active_support/descendants_tracker.rb', line 120

def initialize
  @refs = []
end

Instance Method Details

#<<(klass)

[ GitHub ]

  
# File 'activesupport/lib/active_support/descendants_tracker.rb', line 124

def <<(klass)
  @refs << WeakRef.new(klass)
end

#cleanup!

[ GitHub ]

  
# File 'activesupport/lib/active_support/descendants_tracker.rb', line 142

def cleanup!
  @refs.delete_if { |ref| !ref.weakref_alive? }
end

#each

[ GitHub ]

  
# File 'activesupport/lib/active_support/descendants_tracker.rb', line 128

def each
  @refs.reject! do |ref|
    yield ref.__getobj__
    false
  rescue WeakRef::RefError
    true
  end
  self
end

#refs_size

[ GitHub ]

  
# File 'activesupport/lib/active_support/descendants_tracker.rb', line 138

def refs_size
  @refs.size
end

#reject!

[ GitHub ]

  
# File 'activesupport/lib/active_support/descendants_tracker.rb', line 146

def reject!
  @refs.reject! do |ref|
    yield ref.__getobj__
  rescue WeakRef::RefError
    true
  end
end