Sha256: b7e599254034fedb8687a1f42bf4b7fdb03e1e2e0b1f3f664363bf778620b53e
Contents?: true
Size: 1.14 KB
Versions: 1
Compression:
Stored size: 1.14 KB
Contents
require 'active_support/core_ext/class/subclasses' require 'active_support/core_ext/object/try' module MoreCoreExtensions module ClassHierarchy # Returns a tree-like Hash structure of all descendants. # # require 'socket' # IO.hierarchy # # => {BasicSocket=> # # {Socket=>{}, # # IPSocket=>{TCPSocket=>{TCPServer=>{}}, UDPSocket=>{}}, # # UNIXSocket=>{UNIXServer=>{}}}, # # File=>{}} def hierarchy subclasses.each_with_object({}) { |k, h| h[k] = k.hierarchy } end # Returns an Array of all superclasses. # # require 'socket' # TCPServer.lineage # # => [TCPSocket, IPSocket, BasicSocket, IO, Object, BasicObject] def lineage superclass.nil? ? [] : superclass.lineage.unshift(superclass) end # Returns an Array of all descendants which have no subclasses # # require 'socket' # BasicSocket.leaf_subclasses # # => [Socket, TCPServer, UDPSocket, UNIXServer] def leaf_subclasses descendants.select { |d| d.subclasses.empty? } end end end Class.send(:include, MoreCoreExtensions::ClassHierarchy)
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
more_core_extensions-3.8.0 | lib/more_core_extensions/core_ext/class/hierarchy.rb |