73: def parse(text)
74: taglists = []
75: text.split("\n").each do |line|
76: taglist = emails = nil
77: case line.chomp
78: when /^\s*#/; next
79: when /^\s*$/; next
80: when /^\s*(.+)\s*:\s*(.+)\s*$/
81: taglist = $1
82: emails = $2.sub(/#.*$/,'')
83: else
84: raise ArgumentError, "Invalid tagmail config file"
85: end
86:
87: pos = []
88: neg = []
89: taglist.sub(/\s+$/,'').split(/\s*,\s*/).each do |tag|
90: unless tag =~ /^!?[-\w]+$/
91: raise ArgumentError, "Invalid tag %s" % tag.inspect
92: end
93: case tag
94: when /^\w+/; pos << tag
95: when /^!\w+/; neg << tag.sub("!", '')
96: else
97: raise Puppet::Error, "Invalid tag '%s'" % tag
98: end
99: end
100:
101:
102: emails = emails.sub(/\s+$/,'').split(/\s*,\s*/)
103: taglists << [emails, pos, neg]
104: end
105: return taglists
106: end