You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by Sam Ruby <ru...@apache.org> on 2016/02/22 22:06:06 UTC
[whimsy.git] [1/1] Commit 4617d25: parse the JSON format instead
Commit 4617d251382377b1dc7cd69c08e4ca00baa5aa76:
parse the JSON format instead
Branch: refs/heads/master
Author: Sam Ruby <ru...@intertwingly.net>
Committer: Sam Ruby <ru...@intertwingly.net>
Pusher: rubys <ru...@apache.org>
------------------------------------------------------------
www/members/non-participants.cgi | ++++ ---------
------------------------------------------------------------
50 changes: 16 additions, 34 deletions.
------------------------------------------------------------
diff --git a/www/members/non-participants.cgi b/www/members/non-participants.cgi
index 4401a24..9d9497e 100755
--- a/www/members/non-participants.cgi
+++ b/www/members/non-participants.cgi
@@ -4,61 +4,43 @@ $LOAD_PATH.unshift File.realpath(File.expand_path('../../../lib', __FILE__))
require 'whimsy/asf'
require 'wunderbar'
require 'date'
+require 'json'
# separator / is added when link is generated
ROSTER = "https://whimsy.apache.org/roster/committer"
# locate and read the attendance file
MEETINGS = ASF::SVN['private/foundation/Meetings']
-attendance = IO.read("#{MEETINGS}/attendance.txt")
-
-# scan the headings, extract column information
-headings = attendance[/^(\s+\d+)+/]
-col = 0
-cols = headings.scan(/(\s+)(\d+)/).map {|spaces, date|
- col += spaces.length
- Range.new(col, col+=date.length)
-}
-
-# column information for the member name
-nameField = 0...cols.first.begin
+attendance = JSON.parse(IO.read("#{MEETINGS}/attendance.json"))
# extract and format dates
-dates = cols.map {|range| headings[range]}.
+dates = attendance['dates'].sort.
map {|date| Date.parse(date).strftime('%Y-%b-%d')}
# compute mappings of names to ids
-active = ASF::Member.list.select {|id, data| not data['status']}
-nameMap = Hash[active.map {|id, data| [id, data[:text].split("\n").first]}]
-idMap = Hash[nameMap.map {|id, name| [name.gsub(/[^\x20-\x7F]/, ''), id]}]
-
-# handle cases where names in attendance don't match members.txt
-idMap["Antonio Gallardo Rivera"] = "antonio"
-# idMap["Astrid Keler"] = ?
-# idMap["Astrid Stolper"] = ?
-idMap["Craig Russell"] = 'clr'
-idMap["Donald A. Ball Jr."] = 'balld'
-idMap["Maisonobe Luc"] = 'luc'
-idMap["Noirin Shirley"] = 'noirin'
-idMap["Reto Bachmann-Gmr"] = 'reto'
-idMap["Robertus W.A.M. Huijben (\"Bert\")"] = 'rhuijben'
-idMap["Thomas Fischer"] = 'tfischer'
-idMap["Wilfredo Sanchez"] = 'wsanchez'
-# idMap["William Stoddard"] = 'stoddard'
+members = ASF::Member.list
+active = members.select {|id, data| not data['status']}
+nameMap = Hash[members.map {|id, data| [id, data[:name]]}]
+idMap = Hash[nameMap.to_a.map(&:reverse)]
# analyze attendance
-matrix = attendance.scan(/^[(A-Za-z].*\]\s*$/).map do |line|
- name = line[nameField].strip
+matrix = attendance['matrix'].map do |name, meetings|
id = idMap[name]
next unless id
- data = cols.map {|field| line[field].strip}.reverse
- missed = data.index {|datum| datum != '-'} + 1
+ data = meetings.sort.reverse.map(&:last)
+ missed = (data.index {|datum| datum != '-'} || data.length)
[id, name, missed]
end
# produce HTML
_html do
+ # common banner
+ _a href: 'https://whimsy.apache.org/' do
+ _img title: "ASF Logo", alt: "ASF Logo",
+ src: "https://www.apache.org/img/asf_logo.png"
+ end
+
_h1 'Non-participating active members'
@meetingsMissed = (@meetingsMissed || 5).to_i