45: def inherited(subclass)
46: longname = subclass.to_s
47: if longname =~ /#<Class/
48: raise Puppet::DevError, "Terminus subclasses must have associated constants"
49: end
50: names = longname.split("::")
51:
52:
53: name = names.pop.sub(/^[A-Z]/) { |i| i.downcase }.gsub(/[A-Z]/) { |i| "_" + i.downcase }.intern
54:
55: subclass.name = name
56:
57:
58:
59: if self == Puppet::Indirector::Terminus
60: subclass.mark_as_abstract_terminus
61: return
62: end
63:
64:
65:
66: subclass.terminus_type = self.name
67:
68:
69: raise("Invalid name %s" % longname) unless names.length > 0
70: indirection_name = names.pop.sub(/^[A-Z]/) { |i| i.downcase }.gsub(/[A-Z]/) { |i| "_" + i.downcase }.intern
71:
72: if indirection_name == "" or indirection_name.nil?
73: raise Puppet::DevError, "Could not discern indirection model from class constant"
74: end
75:
76:
77:
78:
79: subclass.indirection = indirection_name
80:
81:
82: Puppet::Indirector::Terminus.register_terminus_class(subclass)
83: end