Website/lib/nsfconflicts.rb

102 lines
2.3 KiB
Ruby
Raw Normal View History

require "rubygems"
require "prawn"
require "prawn/measurement_extensions"
require "util.rb"
class NSFConflicts
def initialize(me, data)
@me = me
@data = data
@meta =
@data["people"].
merge(
@data["lab/members"].
map { |k,m|
[k, m.merge(
{ "institution" => "University at Buffalo" }
)]
}.to_h
).merge(
@data["lab/alumni"].
map { |k,m|
[k, m.merge(
{ "institution" => m["company"] }
)]
}.to_h
)
end
def grant_co_pis
@data["cv/okennedy/grants"].map do |grant|
co_pis = grant.fetch("copis", [])
grant.fetch("collaborative", []).each do |inst|
co_pis = co_pis + inst["pis"]
end
co_pis
end.flatten.uniq
end
def paper_coauthors
@data["publications"].
where { |paper| paper["authors"].include? @me }.
map { |paper| paper["authors"] }.
flatten.
uniq.
delete_if { |name| name == @me }
end
def phd_students
@data["lab/members"].
values.
where { |person| person["status"] == "PhD" }.
map { |person| person["name"] }
end
def phd_alumni
@data["lab/alumni"].
values.
where { |person| person["degree"] == "PhD" }.
map { |person| person["name"] }
end
def full_details(person)
meta = @meta.fetch(person)
"#{person} (#{meta["institution"]})"
end
def canonicalize(person)
@meta[person].fetch("canonical", person)
end
def render(target)
all_collabs = (
grant_co_pis +
paper_coauthors +
phd_students +
phd_alumni
).uniq.sort
missing_collabs =
all_collabs.select { |person| not (@meta.has_key? person) }
unless missing_collabs.empty?
puts ("You are missing collaborator details. Here's a template to add to /db/people.json:")
missing_collabs.each do |collab|
puts " \"#{collab}\" : {"
puts " \"institution\" : \"\","
puts " \"updated\" : \"#{Time.now.year}\""
puts " },"
end
end
all_collabs = all_collabs.map { |person| canonicalize(person) }.uniq.sort
File.open(target, "w+") do |f|
all_collabs.map_index { |i, person| "#{i+1}. #{full_details(person)}" }.
each do |l|
f.puts(l)
end
end
end
end