Sha256: f8bf2393074d93feb38a6f04fea3067da7fa0a9467499e1f5aaf142fc5170d79
Contents?: true
Size: 1.15 KB
Versions: 2
Compression:
Stored size: 1.15 KB
Contents
# encoding: utf-8 # Module that adds descendant tracking to a class module DescendantsTracker # @private def self.extended(descendant) setup(descendant) end private_class_method :extended # @return [Array] # # @private def self.setup(descendant) descendant.instance_variable_set('@descendants', []) end private_class_method :extended # Return the descendants of this class # # @example # descendants = ParentClass.descendants # # @return [Array<Class>] # # @api public def descendants @descendants end # Add the descendant to this class and the superclass # # @param [Class] descendant # # @return [self] # # @api private def add_descendant(descendant) ancestor = superclass if ancestor.respond_to?(:add_descendant) ancestor.add_descendant(descendant) end descendants.unshift(descendant) self end private # Hook called when class is inherited # # @param [Class] descendant # # @return [self] # # @api private def inherited(descendant) super DescendantsTracker.setup(descendant) add_descendant(descendant) end end # module DescendantsTracker
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
descendants_tracker-0.0.3 | lib/descendants_tracker.rb |
descendants_tracker-0.0.2 | lib/descendants_tracker.rb |