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/27 19:13:05 UTC

[whimsy.git] [2/2] Commit a3d3e92: rough in ldap groups

Commit a3d3e92a8eb6093d59805a04b5050d397a7b5ee9:
    rough in ldap groups


Branch: refs/heads/master
Author: Sam Ruby <ru...@intertwingly.net>
Committer: Sam Ruby <ru...@intertwingly.net>
Pusher: rubys <ru...@apache.org>

------------------------------------------------------------
www/roster/main.rb                                           | ++++++++++ 
www/roster/models.rb                                         | + 
www/roster/models/group.rb                                   | +++++++++++++++ 
www/roster/views/app.js.rb                                   | ++ 
www/roster/views/committer.js.rb                             | +++++++ ------
www/roster/views/group.html.rb                               | +++++++++++ 
www/roster/views/group.js.rb                                 | ++++++++ 
------------------------------------------------------------
176 changes: 133 additions, 43 deletions.
------------------------------------------------------------


diff --git a/www/roster/main.rb b/www/roster/main.rb
index f3b4f4c..0ca4b0d 100755
--- a/www/roster/main.rb
+++ b/www/roster/main.rb
@@ -76,6 +76,16 @@
   _html :committer
 end
 
+get '/group/:name.json' do |name|
+  _json Group.serialize(name)
+end
+
+get '/group/:name' do |name|
+  @group = Group.serialize(name)
+  pass unless @group
+  _html :group
+end
+
 # member list
 get '/members' do
   _html :members
diff --git a/www/roster/models.rb b/www/roster/models.rb
index 3cf0d4f..0cf8bb1 100644
--- a/www/roster/models.rb
+++ b/www/roster/models.rb
@@ -2,3 +2,4 @@
 require_relative 'models/auth'
 require_relative 'models/committer'
 require_relative 'models/committee'
+require_relative 'models/group'
diff --git a/www/roster/models/group.rb b/www/roster/models/group.rb
new file mode 100644
index 0000000..be2139c
--- /dev/null
+++ b/www/roster/models/group.rb
@@ -0,0 +1,15 @@
+class Group
+  def self.serialize(id)
+    response = {}
+
+    group = ASF::Group.find(id)
+    people = ASF::Person.preload('cn', group.members)
+
+    response = {
+      id: id,
+      members: Hash[group.members.map {|person| [person.id, person.cn]}]
+    }
+
+    response
+  end
+end
diff --git a/www/roster/views/app.js.rb b/www/roster/views/app.js.rb
index 7cfc5f9..67d716e 100644
--- a/www/roster/views/app.js.rb
+++ b/www/roster/views/app.js.rb
@@ -7,3 +7,5 @@
 
 require_relative 'committer'
 require_relative 'committerSearch'
+
+require_relative 'group'
diff --git a/www/roster/views/committer.js.rb b/www/roster/views/committer.js.rb
index 84aac3b..bf509c0 100644
--- a/www/roster/views/committer.js.rb
+++ b/www/roster/views/committer.js.rb
@@ -1,96 +1,104 @@
 class Committer < React
   def render
-    _h2 "#{@@committer.id}@apache.org"
+    committer = @@committer
+
+    _h2 "#{committer.id}@apache.org"
 
     _table.wide do
 
       _tr do
         _td 'Name'
         _td do
-          name = @@committer.name
+          name = committer.name
 
           if name.public_name==name.legal_name and name.public_name==name.ldap
-            _span @@committer.name.public_name
+            _span committer.name.public_name
           else
             _ul do
-              _li "#{@@committer.name.public_name} (public name)"
+              _li "#{committer.name.public_name} (public name)"
 
               if name.legal_name and name.legal_name != name.public_name
-                _li "#{@@committer.name.legal_name} (legal name)"
+                _li "#{committer.name.legal_name} (legal name)"
               end
 
               if name.ldap and name.ldap != name.public_name
-                _li "#{@@committer.name.ldap} (ldap)"
+                _li "#{committer.name.ldap} (ldap)"
               end
             end
           end
         end
       end
 
-      if @@committer.urls
+      if committer.urls
         _tr do
           _td 'Personal URL'
           _td do
-            _ul @@committer.urls do |url|
+            _ul committer.urls do |url|
               _a url, href: url
             end
           end
         end
       end
 
-      unless @@committer.committees.empty?
-	_tr do
-	  _td 'Committees'
-	  _td do
-	    _ul @@committer.committees do |pmc|
-	      _li {_a pmc, href: "committee/#{pmc}"}
-	    end
-	  end
-	end
+      unless committer.committees.empty?
+        _tr do
+          _td 'Committees'
+          _td do
+            _ul committer.committees do |pmc|
+              _li {_a pmc, href: "committee/#{pmc}"}
+            end
+          end
+        end
       end
 
-      unless @@committer.committer.empty?
-	_tr do
-	  _td 'Committer'
-	  _td do
-	    _ul @@committer.committer do |pmc|
-	      _li {_a pmc, href: "committee/#{pmc}"}
-	    end
-	  end
-	end
+      unless committer.committer.all? {|pmc| committer.committees.include? pmc}
+        _tr do
+          _td 'Committer'
+          _td do
+            _ul committer.committer do |pmc|
+              next if committer.committees.include? pmc
+              _li {_a pmc, href: "committee/#{pmc}"}
+            end
+          end
+        end
       end
 
-      if false # not ready yet
-	_tr do
-	  _td 'Groups'
-	  _td do
-	    _ul @@committer.groups do |pmc|
-	      next if @@committer.committees.include? pmc
-	      _li {_a pmc, href: "committee/#{pmc}"}
-	    end
-	  end
-	end
+      unless committer.groups.empty?
+        _tr do
+          _td 'Groups'
+          _td do
+            _ul committer.groups do |group|
+              if group == 'committers'
+                _li {_a group, href: "committer/"}
+              elsif group == 'member'
+                _li {_a group, href: "members"}
+              else
+                _li {_a group, href: "group/#{group}"}
+              end
+            end
+          end
+        end
       end
 
-      if @@committer.member
-        if @@committer.member.status
+      if committer.member
+        if committer.member.status
           _tr do
             _td 'Member status'
-            _td @@committer.member.status
+            _td committer.member.status
           end
         end
 
-        if @@committer.member.info
+        if committer.member.info
           _tr do
             _td 'Members.txt'
-            _td {_pre @@committer.member.info}
+            _td {_pre committer.member.info}
           end
         end
 
-        if @@committer.member.nomination
+        if committer.member.nomination
           _tr do
             _td 'nomination'
-            _td {_pre @@committer.member.nomination}
+            _td {_pre committer.member.nomination}
           end
         end
       end
diff --git a/www/roster/views/group.html.rb b/www/roster/views/group.html.rb
new file mode 100644
index 0000000..79146ff
--- /dev/null
+++ b/www/roster/views/group.html.rb
@@ -0,0 +1,22 @@
+#
+# A single group
+#
+
+_html do
+  _base href: '..'
+  _title @group[:id]
+  _link rel: 'stylesheet', href: 'stylesheets/app.css'
+
+  _banner breadcrumbs: {
+    roster: '.',
+    group: 'group/',
+    @group[:id] => "group/#{@group[:id]}"
+  }
+
+  _div_.main!
+
+  _script src: 'app.js'
+  _.render '#main' do
+    _Group group: @group
+  end
+end
diff --git a/www/roster/views/group.js.rb b/www/roster/views/group.js.rb
new file mode 100644
index 0000000..575f94f
--- /dev/null
+++ b/www/roster/views/group.js.rb
@@ -0,0 +1,32 @@
+#
+# Show a committee
+#
+
+class Group < React
+  def render
+    group = @@group
+    members = group.members.keys().sort_by {|id| group.members[id]}
+
+    # header
+    _h1 group.id
+
+    # list of members
+    _table.table.table_hover do
+      _thead do
+        _tr do
+          _th 'id'
+          _th 'public name'
+        end
+      end
+
+      _tbody do
+        members.each do |id|
+          _tr do
+            _td {_a id, href: "committer/#{id}"}
+            _td group.members[id]
+          end
+        end
+      end
+    end
+  end
+end