Sha256: c6f7708bfea7714fb5e6131a82166e84ffd7849c7ed2c1741a36aedf948b339e

Contents?: true

Size: 1.27 KB

Versions: 51

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

class Class
  begin
    # Test if this Ruby supports each_object against singleton_class
    ObjectSpace.each_object(Numeric.singleton_class) { }

    # Returns an array with all classes that are < than its receiver.
    #
    #   class C; end
    #   C.descendants # => []
    #
    #   class B < C; end
    #   C.descendants # => [B]
    #
    #   class A < B; end
    #   C.descendants # => [B, A]
    #
    #   class D < C; end
    #   C.descendants # => [B, A, D]
    def descendants
      descendants = []
      ObjectSpace.each_object(singleton_class) do |k|
        next if k.singleton_class?
        descendants.unshift k unless k == self
      end
      descendants
    end
  rescue StandardError # JRuby 9.0.4.0 and earlier
    def descendants
      descendants = []
      ObjectSpace.each_object(Class) do |k|
        descendants.unshift k if k < self
      end
      descendants.uniq!
      descendants
    end
  end

  # Returns an array with the direct children of +self+.
  #
  #   class Foo; end
  #   class Bar < Foo; end
  #   class Baz < Bar; end
  #
  #   Foo.subclasses # => [Bar]
  def subclasses
    subclasses, chain = [], descendants
    chain.each do |k|
      subclasses << k unless chain.any? { |c| c > k }
    end
    subclasses
  end
end

Version data entries

51 entries across 49 versions & 7 rubygems

Version Path
mumukit-content-type-1.12.1 vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6.1/lib/active_support/core_ext/class/subclasses.rb
mumukit-content-type-1.12.0 vendor/bundle/ruby/2.7.0/gems/activesupport-6.0.6.1/lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.6.1 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.6 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.5.1 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.5 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.4.8 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.4.7 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.4.6 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.4.5 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.4.4 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.4.3 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.4.2 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.4.1 lib/active_support/core_ext/class/subclasses.rb
mumukit-content-type-1.11.1 vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.4/lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.4 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.3.7 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.3.6 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.3.5 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.3.4 lib/active_support/core_ext/class/subclasses.rb