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
chatops-rpc-0.0.1 fixtures/chatops-controller-example/vendor/bundle/ruby/2.5.0/gems/activesupport-6.0.0/lib/active_support/core_ext/class/subclasses.rb
zuora_connect_ui-0.9.1 vendor/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/core_ext/class/subclasses.rb
zuora_connect_ui-0.9.0 vendor/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/core_ext/class/subclasses.rb
zuora_connect_ui-0.8.3 vendor/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/core_ext/class/subclasses.rb
zuora_connect_ui-0.8.2 vendor/ruby/2.6.0/gems/activesupport-6.0.0/lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.0 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.0.rc2 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.0.rc1 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.0.beta3 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.0.beta2 lib/active_support/core_ext/class/subclasses.rb
activesupport-6.0.0.beta1 lib/active_support/core_ext/class/subclasses.rb