Class: ASF::Committee
- Defined in:
- lib/whimsy/asf/ldap.rb,
lib/whimsy/asf/mail.rb,
lib/whimsy/asf/site.rb,
lib/whimsy/asf/committee.rb
Constant Summary collapse
- @@aliases =
mapping of committee names to canonical names (generally from ldap) See also www/roster/committee.cgi
Hash.new {|hash, name| name}
- @@namemap =
Proc.new do |name| cname = @@aliases[name.sub(/\s+\(.*?\)/, '').downcase] cname end
Instance Attribute Summary collapse
-
#chairs ⇒ Object
Returns the value of attribute chairs.
-
#emeritus ⇒ Object
Returns the value of attribute emeritus.
-
#established ⇒ Object
Returns the value of attribute established.
-
#info ⇒ Object
Returns the value of attribute info.
-
#report ⇒ Object
Returns the value of attribute report.
-
#roster ⇒ Object
Returns the value of attribute roster.
-
#schedule ⇒ Object
Returns the value of attribute schedule.
Attributes inherited from Base
Class Method Summary collapse
- .find(name) ⇒ Object
- .list(filter = 'cn=*') ⇒ Object
- .load_committee_info ⇒ Object
- .nonpmcs ⇒ Object
- .svn_change ⇒ Object
Instance Method Summary collapse
- #chair ⇒ Object
- #description ⇒ Object
- #display_name ⇒ Object
- #display_name=(name) ⇒ Object
- #dn ⇒ Object
-
#initialize(*args) ⇒ Committee
constructor
A new instance of Committee.
- #mail_list ⇒ Object
- #members ⇒ Object
- #names ⇒ Object
- #nonpmc? ⇒ Boolean
- #site ⇒ Object
Methods inherited from Base
[], #base, base, collection, #id, new, #reference
Constructor Details
#initialize(*args) ⇒ Committee
Returns a new instance of Committee.
11 12 13 14 15 16 17 |
# File 'lib/whimsy/asf/committee.rb', line 11 def initialize(*args) @info = [] @emeritus = [] @chairs = [] @roster = {} super end |
Instance Attribute Details
#chairs ⇒ Object
Returns the value of attribute chairs.
9 10 11 |
# File 'lib/whimsy/asf/committee.rb', line 9 def chairs @chairs end |
#emeritus ⇒ Object
Returns the value of attribute emeritus.
9 10 11 |
# File 'lib/whimsy/asf/committee.rb', line 9 def emeritus @emeritus end |
#established ⇒ Object
Returns the value of attribute established.
9 10 11 |
# File 'lib/whimsy/asf/committee.rb', line 9 def established @established end |
#info ⇒ Object
Returns the value of attribute info.
9 10 11 |
# File 'lib/whimsy/asf/committee.rb', line 9 def info @info end |
#report ⇒ Object
Returns the value of attribute report.
9 10 11 |
# File 'lib/whimsy/asf/committee.rb', line 9 def report @report end |
#roster ⇒ Object
Returns the value of attribute roster.
9 10 11 |
# File 'lib/whimsy/asf/committee.rb', line 9 def roster @roster end |
#schedule ⇒ Object
Returns the value of attribute schedule.
9 10 11 |
# File 'lib/whimsy/asf/committee.rb', line 9 def schedule @schedule end |
Class Method Details
.find(name) ⇒ Object
106 107 108 109 110 |
# File 'lib/whimsy/asf/committee.rb', line 106 def self.find(name) result = super(@@namemap.call(name)) result.display_name = name if name =~ /[A-Z]/ result end |
.list(filter = 'cn=*') ⇒ Object
307 308 309 |
# File 'lib/whimsy/asf/ldap.rb', line 307 def self.list(filter='cn=*') ASF.search_one(base, filter, 'cn').flatten.map {|cn| Committee.find(cn)} end |
.load_committee_info ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/whimsy/asf/committee.rb', line 47 def self.load_committee_info board = ASF::SVN['private/committers/board'] file = "#{board}/committee-info.txt" return unless File.exist? file if @committee_info and File.mtime(file) == @committee_mtime return @committee_info end @committee_mtime = File.mtime(file) @@svn_change = Time.parse( `svn info #{file}`[/Last Changed Date: (.*) \(/, 1]).gmtime info = File.read(file).split(/^\* /) head, report = info.shift.split(/^\d\./)[1..2] head.gsub! /^\s+NAME\s+CHAIR\s*$/,'' # otherwise could match an entry with no e-mail # extract the committee chairs (e-mail address is required here) head.scan(/^[ \t]+(\w.*?)[ \t][ \t]+(.*)[ \t]+<(.*?)@apache\.org>/). each do |committee, name, id| find(committee).chairs << {name: name, id: id} end # Extract the non-PMC committees (e-mail address may be absent) @nonpmcs = head.sub(/.*?also has/m,''). scan(/^[ \t]+(\w.*?)(?:[ \t][ \t]|[ \t]?$)/).flatten.uniq. map {|name| find(name)} info.each do |roster| committee = find(@@namemap.call(roster[/(\w.*?)\s+\(/,1])) committee.established = roster[/\(est\. (.*?)\)/, 1] roster.gsub! /^.*\(\s*emeritus\s*\).*/i do |line| committee.emeritus += line.scan(/<(.*?)@apache\.org>/).flatten '' end committee.info = roster.scan(/<(.*?)@apache\.org>/).flatten committee.roster = Hash[roster.gsub(/\(\w+\)/, ''). scan(/^\s*(.*?)\s*<(.*?)@apache\.org>\s+(\[(.*?)\])?/). map {|list| [list[1], {name: list[0], date: list[3]}]}] end report.scan(/^([^\n]+)\n---+\n(.*?)\n\n/m).each do |period, committees| committees.scan(/^ \s*(.*)/).each do |committee| committee, comment = committee.first.split(/\s+#\s+/,2) committee = find(committee) if comment committee.report = "#{period}: #{comment}" elsif period == 'Next month' committee.report = 'Every month' else committee.schedule = period end end end @committee_info = ASF::Committee.collection.values end |
.nonpmcs ⇒ Object
102 103 104 |
# File 'lib/whimsy/asf/committee.rb', line 102 def self.nonpmcs @nonpmcs end |
.svn_change ⇒ Object
112 113 114 |
# File 'lib/whimsy/asf/committee.rb', line 112 def self.svn_change @@svn_change end |
Instance Method Details
#chair ⇒ Object
116 117 118 119 120 121 122 123 |
# File 'lib/whimsy/asf/committee.rb', line 116 def chair Committee.load_committee_info if @chairs.length >= 1 ASF::Person.find(@chairs.first[:id]) else nil end end |
#description ⇒ Object
96 97 98 99 |
# File 'lib/whimsy/asf/site.rb', line 96 def description site = ASF::Site.find(name) site[:text] if site end |
#display_name ⇒ Object
125 126 127 128 |
# File 'lib/whimsy/asf/committee.rb', line 125 def display_name Committee.load_committee_info @display_name || name end |
#display_name=(name) ⇒ Object
130 131 132 |
# File 'lib/whimsy/asf/committee.rb', line 130 def display_name=(name) @display_name ||= name end |
#dn ⇒ Object
316 317 318 |
# File 'lib/whimsy/asf/ldap.rb', line 316 def dn @dn ||= ASF.search_one(base, "cn=#{name}", 'dn').first.first end |
#mail_list ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/whimsy/asf/mail.rb', line 77 def mail_list case name.downcase when 'comdev' 'community' when 'httpcomponents' 'hc' when 'whimsy' 'whimsical' when 'brand management' '[email protected]' when 'executive assistant' '[email protected]' when 'legal affairs' '[email protected]' when 'marketing and publicity' '[email protected]' when 'tac' '[email protected]' when 'w3c relations' '[email protected]' else name end end |
#members ⇒ Object
311 312 313 314 |
# File 'lib/whimsy/asf/ldap.rb', line 311 def members ASF.search_one(base, "cn=#{name}", 'member').flatten. map {|uid| Person.find uid[/uid=(.*?),/,1]} end |
#names ⇒ Object
142 143 144 145 |
# File 'lib/whimsy/asf/committee.rb', line 142 def names Committee.load_committee_info Hash[@roster.map {|id, info| [id, info[:name]]}] end |