# File lib/puppet/util/subclass_loader.rb, line 17
17:   def handle_subclasses(name, path)
18:     raise ArgumentError, "Must be a class to use SubclassLoader" unless self.is_a?(Class)
19:     @subclasses = []
20: 
21:           @loader = Puppet::Util::Autoload.new(
22:         self,
23:         
24:       path, :wrap => false
25:     )
26: 
27:     @subclassname = name
28: 
29:     @classloader = self
30: 
31:     # Now create a method for retrieving these subclasses by name.  Note
32:     # that we're defining a class method here, not an instance.
33:     meta_def(name) do |subname|
34:       subname = subname.to_s.downcase
35: 
36:       unless c = @subclasses.find { |c| c.name.to_s.downcase == subname }
37:         loader.load(subname)
38:         c = @subclasses.find { |c| c.name.to_s.downcase == subname }
39: 
40:         # Now make the method that returns this subclass.  This way we
41:         # normally avoid the method_missing method.
42:         define_method(subname) { c } if c and ! respond_to?(subname)
43:       end
44:       return c
45:     end
46:   end