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)

Reply via email to