Module: Launchy::DescendantTracker
- Included in:
- Application, Launchy::Detect::HostOsFamily, Launchy::Detect::NixDesktopEnvironment, Launchy::Detect::RubyEngine, Launchy::Detect::Runner, OSFamily
- Defined in:
- lib/launchy/descendant_tracker.rb
Overview
Use by either
class Foo
extend DescendantTracker
end
or
class Foo
class << self
include DescendantTracker
end
end
It will track all the classes that inherit from the extended class and keep them in a Set that is available via the ‘children’ method.
Instance Method Summary collapse
-
#children ⇒ Object
The list of children that are registered.
-
#find_child(method, *args) ⇒ Object
Find one of the child classes by calling the given method and passing all the rest of the parameters to that method in each child.
- #inherited(klass) ⇒ Object
Instance Method Details
#children ⇒ Object
The list of children that are registered
31 32 33 34 35 36 |
# File 'lib/launchy/descendant_tracker.rb', line 31 def children unless defined? @children @children = Set.new end return @children end |
#find_child(method, *args) ⇒ Object
Find one of the child classes by calling the given method and passing all the rest of the parameters to that method in each child
42 43 44 45 46 47 |
# File 'lib/launchy/descendant_tracker.rb', line 42 def find_child( method, *args ) klass = children.find do |child| Launchy.log "Checking if class #{child} is the one for #{method}(#{args.join(', ')})}" child.send( method, *args ) end end |
#inherited(klass) ⇒ Object
23 24 25 26 |
# File 'lib/launchy/descendant_tracker.rb', line 23 def inherited( klass ) return unless klass.instance_of?( Class ) self.children << klass end |