lib/whimsy/asf/nominees.rb (29 lines of code) (raw):
require 'weakref'
module ASF
class Person < Base
# Return a hash of nominated members. Keys are ASF::Person objects,
# values are the nomination text.
def self.member_nominees
begin
return Hash[@member_nominees.to_a] if @member_nominees
rescue
end
meetings = ASF::SVN['Meetings']
nominations = Dir[File.join(meetings, '*', 'nominated-members.txt')].max
# ensure non-UTF-8 chars don't cause a crash
nominations = File.read(nominations).encode('utf-8', 'utf-8', :invalid => :replace).split(/^\s*---+--\s*/)
nominations.shift(2)
nominees = {}
nominations.each do |nomination|
# leading space is swallowed by the split; match against
# <NOMINATED PERSON'S APACHE ID> <PUBLIC NAME>
id = nomination[/\A(\S+)/, 1]
id ||= nomination[/^\s?\w+.*<(\S+)@apache.org>/, 1]
id ||= nomination[/^\s?\w+.*\((\S+)@apache.org\)/, 1]
id ||= nomination[/^\s?\w+.*\(([a-z]+)\)/, 1]
next unless id
nominees[find(id)] = nomination
end
@member_nominees = WeakRef.new(nominees)
nominees
end
# Return the member nomination text for this individual
def member_nomination
@member_nomination ||= Person.member_nominees[self]
end
end
end