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