On 27 January 2016 at 22:35, Sebastian Bazley <s...@apache.org> wrote: > Commit 6c30425b44a9b9bc3a25312b4c8afda20ec412e2: > Add Service preload > > > Branch: refs/heads/master > Author: Sebb <s...@apache.org> > Committer: Sebb <s...@apache.org> > Pusher: sebb <s...@apache.org> > > ------------------------------------------------------------ > lib/whimsy/asf/ldap.rb | +++++++++++ - > ------------------------------------------------------------ > 24 changes: 22 additions, 2 deletions. > ------------------------------------------------------------ > > > diff --git a/lib/whimsy/asf/ldap.rb b/lib/whimsy/asf/ldap.rb > index a9e2503..11686f0 100644 > --- a/lib/whimsy/asf/ldap.rb > +++ b/lib/whimsy/asf/ldap.rb > @@ -456,9 +456,29 @@ def dn > "cn=#{id},#{self.class.base}" > end > > + def self.preload > + Hash[ASF.search_one(base, "cn=*", %w(dn member modifyTimestamp)).map > do |results| > + cn = results['dn'].first[/^cn=(.*?),/, 1] > + service = ASF::Service.find(cn) > + service.modifyTimestamp = results['modifyTimestamp'].first # it is > returned as an array of 1 entry > + members = results['member'] || [] > + service.members = members
Note that Group does this instead: members = results['memberUid'] group.members = members || [] However it seemed to me that one would want members to be the same as group.members, so the alternate should be on the previous line - or have I misunderstood? Note that Committee.preload does not currently check for null - perhaps it should ? > + [service, members] > + end] > + end > + > + attr_accessor :modifyTimestamp > + > + def members=(members) > + @members = WeakRef.new(members) > + end > + > def members > - ASF.search_one(base, "cn=#{name}", 'member').flatten. > - map {|uid| Person.find uid[/uid=(.*?),/,1]} > + members = weakref(:members) do > + ASF.search_one(base, "cn=#{name}", 'member').flatten > + end > + > + members.map {|uid| Person.find uid[/uid=(.*?),/,1]} > end > > def remove(people)