blob: 1b6d77c67ad863d1ddb841351dbad565bea963c3 [file] [log] [blame]
#
# potential actions
#
# get posted action items from previous report
if ENV['RACK_ENV'] == 'test'
base = "#{FOUNDATION_BOARD}/board_agenda_2015_01_21.txt"
else
today = Date.today.strftime("#{FOUNDATION_BOARD}/board_agenda_%Y_%m_%d.txt")
base = Dir["#{FOUNDATION_BOARD}/board_agenda_*.txt"].
select {|file| file <= today}.sort.last
end
raise IOError.new("No previous agenda found") unless base
parsed = ASF::Board::Agenda.parse(IO.read(base), true)
actions = parsed.find {|item| item['title'] == 'Action Items'}['actions']
# scan draft minutes for new action items
pattern = /^(?:@|AI\s+)(\w+):?\s+([\s\S]*?)(?:\n\n|$)/m
minutes = File.basename(base).sub('agenda', 'minutes').sub('.txt', '.yml')
date = minutes[/\d{4}_\d\d_\d\d/].gsub('_', '-')
minutes = YAML.load_file(File.join(AGENDA_WORK, minutes)) rescue {}
minutes.each do |title, secnotes|
next unless secnotes.is_a? String
secnotes.scan(pattern).each do |owner, text|
text = text.reflow(6, 72).strip
actions << {owner: owner, text: text, status: nil, pmc: title, date: date}
end
end
# get roll call info
roll = parsed.find {|item| item['title'] == 'Roll Call'}['people']
# return results
_date date
_actions actions
_names roll.map {|id, person| person[:name].split(' ').first}.sort.uniq