102 lines
2.3 KiB
Ruby
102 lines
2.3 KiB
Ruby
|
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
|