class ASF::Project
Ultimately, this will include both PMCs and PPMCs, and enable separate updating of owners and members. For now this is only used for PPMCs and owners and members are kept in sync.
Attributes
Date this committee was initially created in LDAP
.
Date this committee was last modified in LDAP
.
Public Class Methods
return project only if it actually exits
ASF::Base::[]
# File lib/whimsy/asf/ldap.rb, line 1194 def self.[](name) project = super project.dn ? project : nil end
obtain a list of projects from LDAP
# File lib/whimsy/asf/ldap.rb, line 1184 def self.list(filter='cn=*') ASF.search_one(base, filter, 'cn').flatten.map {|cn| Project.find(cn)} end
obtain a list of projectids from LDAP
# File lib/whimsy/asf/ldap.rb, line 1189 def self.listids(filter='cn=*') ASF.search_one(base, filter, 'cn').flatten end
fetch dn
, member
, modifyTimestamp
, and createTimestamp
for all projects in LDAP
.
# File lib/whimsy/asf/ldap.rb, line 1201 def self.preload Hash[ASF.search_one(base, "cn=*", %w(dn member owner modifyTimestamp createTimestamp)).map do |results| cn = results['dn'].first[/^cn=(.*?),/, 1] project = self.find(cn) project.modifyTimestamp = results['modifyTimestamp'].first # it is returned as an array of 1 entry project.createTimestamp = results['createTimestamp'].first # it is returned as an array of 1 entry members = results['member'] || [] owners = results['owner'] || [] # TODO members and owners are duplicated in the project object and the returned hash project.members = members project.owners = owners [project, [members, owners]] # TODO is this correct? it seems to work... end] end
Public Instance Methods
add people to a project as members and owners in LDAP
# File lib/whimsy/asf/ldap.rb, line 1314 def add(people) add_owners(people) add_members(people) end
add people as members of a project in LDAP
# File lib/whimsy/asf/ldap.rb, line 1331 def add_members(people) @members = nil # force fresh LDAP search additions = (Array(people) - members).map(&:dn) unless additions.empty? ASF::LDAP.modify(self.dn, [ASF::Base.mod_add('member', additions)]) end ensure @members = nil end
add people as owners of a project in LDAP
# File lib/whimsy/asf/ldap.rb, line 1320 def add_owners(people) @owners = nil # force fresh LDAP search additions = (Array(people) - owners).map(&:dn) unless additions.empty? ASF::LDAP.modify(self.dn, [ASF::Base.mod_add('owner', additions)]) end ensure @owners = nil end
create an LDAP
group for this project
# File lib/whimsy/asf/ldap.rb, line 1228 def create(owners, committers=nil) committers = Array(committers || owners).map(&:dn) owners = Array(owners).map(&:dn) entry = [ ASF::Base.mod_add('objectClass', ['groupOfNames', 'top']), ASF::Base.mod_add('cn', name), ASF::Base.mod_add('owner', owners), ASF::Base.mod_add('member', committers), ] ASF::LDAP.add("cn=#{name},#{base}", entry) self.owners = owners self.members = committers end
Designated Name from LDAP
# File lib/whimsy/asf/ldap.rb, line 1223 def dn @dn ||= ASF.search_one(base, "cn=#{name}", 'dn').first.first rescue nil end
list of member ids in the project
# File lib/whimsy/asf/ldap.rb, line 1264 def memberids members = weakref(:members) do ASF.search_one(base, "cn=#{name}", 'member').flatten end members.map {|uid| uid[/uid=(.*?),/, 1]} end
list of committers on this project. Stored in LDAP
as a member
attribute.
# File lib/whimsy/asf/ldap.rb, line 1259 def members memberids.map {|id| Person.find id} end
setter for members, should only be called by preload. N.B. Do not dereference @members directly; use weakref(:members) instead
# File lib/whimsy/asf/ldap.rb, line 1247 def members=(members) @members = WeakRef.new(members) end
list of owner ids in the project
# File lib/whimsy/asf/ldap.rb, line 1278 def ownerids owners = weakref(:owners) do ASF.search_one(base, "cn=#{name}", 'owner').flatten end owners.map {|uid| uid[/uid=(.*?),/, 1]} end
list of owners on this project. Stored in LDAP
as a owners
attribute.
# File lib/whimsy/asf/ldap.rb, line 1273 def owners ownerids.map {|id| Person.find id} end
setter for owners, should only be called by preload. N.B. Do not dereference @owners directly; use weakref(:owners) instead
# File lib/whimsy/asf/ldap.rb, line 1253 def owners=(owners) @owners = WeakRef.new(owners) end
remove people from a project as owners and members in LDAP
# File lib/whimsy/asf/ldap.rb, line 1286 def remove(people) remove_owners(people) remove_members(people) end
remove people as members of a project in LDAP
# File lib/whimsy/asf/ldap.rb, line 1303 def remove_members(people) @members = nil # force fresh LDAP search removals = (Array(people) & members).map(&:dn) unless removals.empty? ASF::LDAP.modify(self.dn, [ASF::Base.mod_delete('member', removals)]) end ensure @members = nil end
remove people as owners of a project in LDAP
# File lib/whimsy/asf/ldap.rb, line 1292 def remove_owners(people) @owners = nil # force fresh LDAP search removals = (Array(people) & owners).map(&:dn) unless removals.empty? ASF::LDAP.modify(self.dn, [ASF::Base.mod_delete('owner', removals)]) end ensure @owners = nil end