Commit 6c30425b44a9b9bc3a25312b4c8afda20ec412e2:
Add Service preload
Branch: refs/heads/master
Author: Sebb <[email protected]>
Committer: Sebb <[email protected]>
Pusher: sebb <[email protected]>
------------------------------------------------------------
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
+ [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)