Sha256: 8369b4f99b5e4ef0c108342d2e8f36805d7bb4859a12766efaa51be9d9511208

Contents?: true

Size: 905 Bytes

Versions: 15

Compression:

Stored size: 905 Bytes

Contents

module Virtus

  # A module that adds descendant tracking to a class
  module DescendantsTracker

    # Return the descendants of this class
    #
    # @return [Array<Class>]
    #
    # @api private
    def descendants
      @descendants ||= []
    end

    # Add the descendant to this class and the superclass
    #
    # @param [Class] descendant
    #
    # @return [self]
    #
    # @api private
    def add_descendant(descendant)
      superclass = self.superclass
      superclass.add_descendant(descendant) if superclass.respond_to?(:add_descendant)
      descendants.unshift(descendant)
      self
    end

  private

    # Hook called when class is inherited
    #
    # @param [Class] descendant
    #
    # @return [undefined]
    #
    # @api private
    def inherited(descendant)
      super
      add_descendant(descendant)
    end

  end # module DescendantsTracker
end # module Virtus

Version data entries

15 entries across 15 versions & 2 rubygems

Version Path
fragrant-0.0.5 vendor/bundle/ruby/1.9.1/gems/virtus-0.5.2/lib/virtus/support/descendants_tracker.rb
virtus-0.5.2 lib/virtus/support/descendants_tracker.rb
virtus-0.5.1 lib/virtus/support/descendants_tracker.rb
virtus-0.5.0 lib/virtus/support/descendants_tracker.rb
virtus-0.4.2 lib/virtus/support/descendants_tracker.rb
virtus-0.4.1 lib/virtus/support/descendants_tracker.rb
virtus-0.4.0 lib/virtus/support/descendants_tracker.rb
virtus-0.3.0 lib/virtus/support/descendants_tracker.rb
virtus-0.2.0 lib/virtus/support/descendants_tracker.rb
virtus-0.1.0 lib/virtus/support/descendants_tracker.rb
virtus-0.0.10 lib/virtus/support/descendants_tracker.rb
virtus-0.0.9 lib/virtus/support/descendants_tracker.rb
virtus-0.0.8 lib/virtus/support/descendants_tracker.rb
virtus-0.0.7 lib/virtus/support/descendants_tracker.rb
virtus-0.0.6 lib/virtus/support/descendants_tracker.rb