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:
31:
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:
40:
41: if c and ! respond_to?(subname)
42: define_method(subname) { c }
43: end
44: end
45: return c
46: end
47: end