in lib/whimsy/asf/agenda/summary.rb [34:118]
def self.summarize(fname)
summary = {}
meeting = File.basename(fname, '.*')
if SKIP_AGENDAS.has_key?(meeting)
summary[ERRORS_KEY] = "SKIP(#{meeting}) was: #{SKIP_AGENDAS[meeting]}"
return summary
end
begin
agenda = ASF::Board::Agenda.parse(File.read(fname))
rescue StandardError => e
summary[ERRORS_KEY] = "ERROR(#{meeting}) Agenda parse error: #{e.message} #{e.backtrace[0]}"
return summary
end
begin
summary[PEOPLE_KEY] = Hash[agenda[1][PEOPLE_KEY]]
summary[PEOPLE_KEY].each do |id, data|
data['initials'] = ASF::Board.directorInitials(id) if ASF::Board.directorHasId?(id)
end
rescue StandardError => e
summary[ERRORS_KEY] = "ERROR(#{meeting}) no attendance error: #{e.message} #{e.backtrace[0]}"
return summary
end
begin
approvals = agenda.select{ |v| v.has_key?(APPROVED_KEY) }
preports, oreports = approvals.partition{ |v| /\A[[:alpha:]]/ =~ v[ATTACH_KEY] }
summary[OFFICERS_KEY] = Hash.new{|h,k| h[k] = {} }
oreports.each do |r|
summary[OFFICERS_KEY][r[TITLE_KEY]]['owner'] = r['owner'] if r.has_key?('owner')
summary[OFFICERS_KEY][r[TITLE_KEY]][APPROVALS_KEY] = Array.new(r['approved'])
summary[OFFICERS_KEY][r[TITLE_KEY]][COMMENT_LEN] = r['comments'].length
summary[OFFICERS_KEY][r[TITLE_KEY]][REPORT_LEN] = r['report'].length if r['report']
end
summary[PMCS_KEY] = Hash.new{|h,k| h[k] = {} }
preports.each do |r|
summary[PMCS_KEY][r[TITLE_KEY]]['owner'] = r['owner']
if r.has_key?('missing')
summary[PMCS_KEY][r[TITLE_KEY]]['missing'] = true
else
summary[PMCS_KEY][r[TITLE_KEY]][APPROVALS_KEY] = Array.new(r['approved'])
summary[PMCS_KEY][r[TITLE_KEY]][COMMENT_LEN] = r['comments'].length
summary[PMCS_KEY][r[TITLE_KEY]][REPORT_LEN] = r['report'].length if r['report']
end
end
actions = agenda.select{ |v| v.has_key?(INDEX_KEY) && v[INDEX_KEY] == 'Action Items' }[0][ACTIONS_KEY]
if actions
summary[ACTIONS_KEY] = Hash.new{|h,k| h[k] = [] }
actions.each do |r|
summary[ACTIONS_KEY][r[:owner]] << r[:pmc]
end
end
summary[STATS_KEY] = {}
summary[STATS_KEY]['specialorders'] = agenda.select{ |v| /\A7/ =~ v[ATTACH_KEY] }.length
summary[STATS_KEY]['discusstextlen'] = agenda.select{ |v|
v[INDEX_KEY] == 'Discussion Items' || /\A8[A-Z]/ =~ v[ATTACH_KEY]
}.map {|v| v['text'].length}.sum
totapprovals = 0
totcommentlen = 0
totreportlen = 0
totreports = (summary[OFFICERS_KEY].length + summary[PMCS_KEY].length).to_f
summary[OFFICERS_KEY].each do |x, data|
totapprovals += data[APPROVALS_KEY].length if data[APPROVALS_KEY]
totcommentlen += data[COMMENT_LEN] if data[COMMENT_LEN]
totreportlen += data[REPORT_LEN] if data[REPORT_LEN]
end
summary[PMCS_KEY].each do |x, data|
totapprovals += data[APPROVALS_KEY].length if data[APPROVALS_KEY]
totcommentlen += data[COMMENT_LEN] if data[COMMENT_LEN]
totreportlen += data[REPORT_LEN] if data[REPORT_LEN]
end
if totreports != 0
summary[STATS_KEY]['avgapprovals'] = (totapprovals / totreports).round(2)
summary[STATS_KEY]['avgcommentlen'] = (totcommentlen / totreports).round(0)
summary[STATS_KEY]['avgreportlen'] = (totreportlen / totreports).round(0)
end
rescue StandardError => e
summary[ERRORS_KEY] ||= "ERROR(#{meeting}) process error: #{e.message} #{e.backtrace[0]}"
end
return summary
end