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