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/16 18:18:55 UTC
[whimsy.git] [1/1] Commit dd84aac: members list
Commit dd84aaccf95a616343adf0ffd454a941e0b21a9c:
members list
Branch: refs/heads/master
Author: Sam Ruby <ru...@intertwingly.net>
Committer: Sam Ruby <ru...@intertwingly.net>
Pusher: rubys <ru...@apache.org>
------------------------------------------------------------
lib/whimsy/asf/member.rb | ++++ -
www/roster/main.rb | ++++++++++
www/roster/public/stylesheets/app.css | +
www/roster/views/index.html.rb | ++++++++ -
www/roster/views/members.html.rb | ++++++++++++
------------------------------------------------------------
125 changes: 123 additions, 2 deletions.
------------------------------------------------------------
diff --git a/lib/whimsy/asf/member.rb b/lib/whimsy/asf/member.rb
index 49615aa..52c3911 100644
--- a/lib/whimsy/asf/member.rb
+++ b/lib/whimsy/asf/member.rb
@@ -15,7 +15,10 @@ def self.each(&block)
end
def self.list
- result = Hash[self.new(true).map {|name, text| [name, {text: text}]}]
+ result = Hash[self.new(true).map {|id, text|
+ [id, {text: text, name: text[/(.*?)\s*(\(|\/\*|$)/, 1]}]
+ }]
+
self.status.each do |name, value|
result[name]['status'] = value
end
diff --git a/www/roster/main.rb b/www/roster/main.rb
index 747f11c..5324d75 100755
--- a/www/roster/main.rb
+++ b/www/roster/main.rb
@@ -19,6 +19,7 @@
get '/' do
@committers = ASF::Person.list
@committees = ASF::Committee.list
+ @members = ASF::Member.list.keys - ASF::Member.status.keys
_html :index
end
@@ -64,6 +65,15 @@
_html :committer
end
+# member list
+get '/members' do
+ _html :members
+end
+
+get '/members.json' do
+ _json Hash[ASF.members.map {|person| [person.id, person.public_name]}.sort]
+end
+
# posted actions
post '/actions/:file' do
_json :"actions/#{params[:file]}"
diff --git a/www/roster/public/stylesheets/app.css b/www/roster/public/stylesheets/app.css
index 51c69b9..ac6eff6 100644
--- a/www/roster/public/stylesheets/app.css
+++ b/www/roster/public/stylesheets/app.css
@@ -6,6 +6,7 @@ h4 {margin-left: 1em}
table ul {margin: 0; padding: 0; list-style: none}
table {border-spacing: 0}
table.wide {border-spacing: 0 1em}
+.counts td:first-child {text-align: right}
.wide td:first-child {text-align: right; padding: 0}
.wide td:first-child:after {content: ' —'}
.wide td:last-child {border-left: solid 1px #000; padding: 0 0.5em}
diff --git a/www/roster/views/index.html.rb b/www/roster/views/index.html.rb
index 0db89bd..2a8b308 100644
--- a/www/roster/views/index.html.rb
+++ b/www/roster/views/index.html.rb
@@ -12,7 +12,7 @@
_h1_ 'Roster'
- _table do
+ _table.counts do
### committers
@@ -28,6 +28,20 @@
_td 'Search for committers by name, user id, or email address'
end
+ ### members
+
+ _tr do
+ _td do
+ _a @members.length, href: 'members'
+ end
+
+ _td do
+ _a 'Members', href: 'members'
+ end
+
+ _td 'Active ASF members'
+ end
+
### PMCs
_tr do
diff --git a/www/roster/views/members.html.rb b/www/roster/views/members.html.rb
new file mode 100644
index 0000000..57e0f7e
--- /dev/null
+++ b/www/roster/views/members.html.rb
@@ -0,0 +1,93 @@
+#
+# A single committer
+#
+
+_html do
+ _base href: '..'
+ _title 'ASF Member list'
+ _link rel: 'stylesheet', href: 'stylesheets/app.css'
+
+ _banner breadcrumbs: {
+ roster: '.',
+ members: 'members'
+ }
+
+ members = ASF::Member.list.dup
+
+ # ********************************************************************
+ # * Summary *
+ # ********************************************************************
+
+ _h1 'Summary'
+
+ summary = ASF::Member.status
+
+ _table.counts do
+ _tr do
+ _td((members.keys - summary.keys).length)
+ _td 'Active members'
+ end
+
+ summary.group_by(&:last).each do |category, list|
+ _tr do
+ _td list.count
+ _td category + 's'
+ end
+ end
+ end
+
+ # ********************************************************************
+ # * Merge LDAP info *
+ # ********************************************************************
+
+ # merge ldap info, preferring public names over name listed in members.txt
+ ldap = ASF.members
+ preload = ASF::Person.preload('cn', ldap)
+
+ ldap.each do |person|
+ if members[person.id]
+ members[person.id][:name] = person.cn
+ else
+ members[person.id] = {name: person.cn, issue: 'not in members.txt'}
+ end
+ end
+
+ # ********************************************************************
+ # * Complete list *
+ # ********************************************************************
+
+ _h1 'Members'
+
+ _table.table.table_hover do
+ _thead do
+ _tr do
+ _th 'id'
+ _th 'public name'
+ _th 'status'
+ end
+ end
+
+ members.sort_by {|id, info| info[:name]}.each do |id, info|
+ _tr_ do
+ _td! do
+ if ldap.include? ASF::Person.find(id)
+ _b {_a id, href: "committer/#{id}"}
+ else
+ _a id, href: "committer/#{id}"
+
+ info[:issue] ||= 'Not in LDAP' if not info['status']
+ end
+ end
+
+ _td info[:name]
+
+ if info[:issue]
+ _td.issue info[:issue]
+ elsif
+ _td info['status']
+ end
+ end
+ end
+ end
+
+end