blob: 8abed0364fe1cb564d6f90731ccb9975ec2aeda5 [file] [log] [blame]
#
# Common access to membership application files
#
### INITIAL RELEASE - SUBJECT TO CHANGE ###
require_relative 'config'
require_relative 'svn'
module ASF
class MemApps
@@files = nil
@@tag = nil
STEM = 'member_apps'
def self.update_cache(env)
ASF::DocumentUtils.update_cache(STEM, env)
end
# list the stems of the files
def self.stems
refresh
@@files.map do |file|
file.sub(/\.\w+$/, '')
end
end
# list the names of the files (excluding any ones which record emeritus)
def self.names
refresh
@@files
end
def self.sanitize(name)
# Don't transform punctuation into '-'
ASF::Person.asciize(name.strip.downcase.gsub(/[.,()"]/, ''))
end
# search for file name
# @return filename if it exists, or
# return full name if filename matches the stem of a file
def self.search(filename)
names = self.names()
if names.include?(filename)
return filename
end
names.each { |name|
if name.start_with?("#{filename}.")
return name
end
}
nil
end
# find the name of the memapp for a person or nil
def self.find1st(person)
self.find(person)[0].first
end
# find the memapp for a person; return an array:
# - [array of files that matched (possibly empty), array of stems that were tried]
def self.find(person)
found = [] # matches we found
names = [] # names we tried
[
(person.icla.legal_name rescue nil),
(person.icla.name rescue nil),
person.id, # allow match on avalid
person.member_name # this is slow
].uniq.each do |name|
next unless name
memapp = self.sanitize(name) # this may generate dupes, so we use uniq below
names << memapp
file = self.search(memapp)
if file
found << file
end
end
return [found, names.uniq]
end
# All files
def self.files
refresh
@@files
end
private
def self.refresh
cache_dir = ASF::DocumentUtils.check_cache(STEM).first
@@tag, list = ASF::SVN.getlisting(STEM, @@tag, true, false, cache_dir)
if list
@@files = list
end
end
end
end
# for test purposes
if __FILE__ == $0
require_relative 'documents'
puts ASF::MemApps.files.length
puts ASF::MemApps.names.length
puts ASF::MemApps.stems.length
end