module Chef::Mixin::DescendantsTracker
Public Class Methods
descendants(klass)
click to toggle source
# File lib/chef/mixin/descendants_tracker.rb, line 37 def descendants(klass) arr = [] accumulate_descendants(klass, arr) arr end
direct_descendants(klass)
click to toggle source
# File lib/chef/mixin/descendants_tracker.rb, line 33 def direct_descendants(klass) @@direct_descendants[klass] || [] end
find_descendants_by_name(klass, name)
click to toggle source
# File lib/chef/mixin/descendants_tracker.rb, line 43 def find_descendants_by_name(klass, name) descendants(klass).first { |c| c.name == name } end
store_inherited(klass, descendant)
click to toggle source
This is the only method that is not thread safe, but is only ever called during the eager loading phase.
# File lib/chef/mixin/descendants_tracker.rb, line 49 def store_inherited(klass, descendant) (@@direct_descendants[klass] ||= []) << descendant end
Private Class Methods
accumulate_descendants(klass, acc)
click to toggle source
# File lib/chef/mixin/descendants_tracker.rb, line 55 def accumulate_descendants(klass, acc) if direct_descendants = @@direct_descendants[klass] acc.concat(direct_descendants) direct_descendants.each { |direct_descendant| accumulate_descendants(direct_descendant, acc) } end end
Public Instance Methods
descendants()
click to toggle source
# File lib/chef/mixin/descendants_tracker.rb, line 76 def descendants DescendantsTracker.descendants(self) end
direct_descendants()
click to toggle source
# File lib/chef/mixin/descendants_tracker.rb, line 68 def direct_descendants DescendantsTracker.direct_descendants(self) end
find_descendants_by_name(name)
click to toggle source
# File lib/chef/mixin/descendants_tracker.rb, line 72 def find_descendants_by_name(name) DescendantsTracker.find_descendants_by_name(self, name) end
inherited(base)
click to toggle source
Calls superclass method
# File lib/chef/mixin/descendants_tracker.rb, line 63 def inherited(base) DescendantsTracker.store_inherited(self, base) super end