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