| # Executive Officer Reports |
| |
| class ASF::Board::Agenda |
| parse do |
| reports = @file.split(OFFICER_SEPARATOR,2).last |
| a = reports.split(/^ 5. Additional Officer Reports/,2).first |
| b = reports.split(/^ 5. Committee Reports/,2).first # Allow parsing of pre-2007 reports |
| (a.length > b.length) ? reports = b : reports = a |
| |
| pattern = / |
| \s{4}(?<section>[A-Z])\. |
| \s(?<title>[^\[]+?) |
| \s\[(?<owner>[^\]]+?)\] |
| (?<report>.*?) |
| (?=\n\s{4}[A-Z]\.\s|\z) |
| /mx |
| |
| scan reports, pattern do |attrs| |
| attrs['section'] = '4' + attrs['section'] |
| attrs['shepherd'] = attrs['owner'].split('/').last |
| attrs['owner'] = attrs['owner'].split('/').first |
| |
| attrs['report'].sub! /\A\s*\n/, '' |
| |
| attrs['report'].gsub! /\n\s*\n\s+\[ comments:(.*)\]\s*$/m do |
| attrs['comments'] = $1.sub(/\A\s*\n/, '').sub(/\s+\Z/, '') |
| "\n" |
| end |
| |
| report = attrs['report'].strip |
| if report.empty? or report[0..12] == 'Additionally,' |
| attrs['missing'] = true |
| end |
| |
| attrs['digest'] = Digest::MD5.hexdigest(report) |
| end |
| end |
| end |