74: def groups=(values)
75: should = values.split(",")
76:
77: if groups() == :absent
78: is = []
79: else
80: is = groups().split(",")
81: end
82:
83: modes = {}
84: [is, should].flatten.uniq.each do |group|
85:
86: next if is.include?(group) and should.include?(group)
87:
88:
89: modes[group] = :add and next unless is.include?(group)
90:
91:
92: modes[group] = :remove and next unless should.include?(group)
93: end
94:
95: modes.each do |group, form|
96: self.fail "Could not find ldap group %s" % group unless ldap_group = group_manager.find(group)
97:
98: current = ldap_group[:members]
99:
100: if form == :add
101: if current.is_a?(Array) and ! current.empty?
102: new = current + [name]
103: else
104: new = [name]
105: end
106: else
107: new = current - [name]
108: new = :absent if new.empty?
109: end
110:
111: group_manager.update(group, {:ensure => :present, :members => current}, {:ensure => :present, :members => new})
112: end
113: end