require "text.rb" module UBSOE def UBSOE::generate_yearly_report(since_year) puts "-------------------------------------------------------" puts "| Publications |" puts "-------------------------------------------------------" puts "" # # Include journal/conference/publication titles, authors, # event dates and locations, acceptance rate and number # of pages as appropriate # pubs = $db["publications"] pubs += $db["cv/okennedy/publications_submitted"] .select { |pub| pub["status"] == "submitted"} .map { |pub| pub.merge({ "type" => "submitted" }) } puts(pubs .select { |pub| pub["year"].to_i >= since_year.to_i } .map { |pub| pub_string = [ "\"#{pub["title"]}\"", pub["authors"].join(", "), LabMetadata.venue_name(pub), ] v = LabMetadata.complete_venue(pub) pub_string.push("#{pub["length"]} pages") if pub.has_key? "length" pub_string.push("Acceptance rate #{LabMetadata.venue_selectivity(pub)}") unless v["type"] == "techreport" pub_string.push(v["location"]) if v.has_key? "location" pub_string.push(v["date"]) if v.has_key? "date" pub_string.join("\n") }.join("\n\n------\n\n") ) puts "" puts "" puts "-------------------------------------------------------" puts "| Presentations |" puts "-------------------------------------------------------" puts "" puts( $db["cv/okennedy/talks"] .select { |talk| if /([0-9]{4})/ =~ talk["date"] then $1.to_i >= since_year end } .map { |talk| "#{talk["talk"]}\n#{talk["date"]}\n#{talk["venue"]}" } .join("\n\n------\n\n") ) puts "" puts "" puts "-------------------------------------------------------" puts "| Advising |" puts "-------------------------------------------------------" puts "" puts( $db["lab/members"] .map { |k, person| "#{person["name"]}\n#{person["ubit"]}\n#{person["status"]}" } .join("\n\n------\n\n") ) puts "" puts "" puts "-------------------------------------------------------" puts "| Grants |" puts "-------------------------------------------------------" puts "" puts( $db["cv/okennedy/grants"] .select { |grant| grant["status"] == "accepted" } .select { |grant| if /([0-9]{4})/ =~ grant["start"] then $1.to_i >= since_year end } .map { |grant| title = grant["title"] amount = grant["amount"] agency = grant["agency"] effort = case grant.fetch("effort", nil) when /([0-9]+)%/ then $1.to_f / 100.0 * amount when nil then nil else raise "Unknown effort format #{grant["effort"]}" end "#{title}\n#{agency}\n#{TextUtils.format_money(amount)}#{if effort.nil? then "" else " (#{TextUtils.format_money(effort)} by effort)" end}" } ) puts puts end end