# File lib/puppet/provider/user/ldap.rb, line 74
 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:             # Skip it when they're in both
 86:             next if is.include?(group) and should.include?(group)
 87: 
 88:             # We're adding a group.
 89:             modes[group] = :add and next unless is.include?(group)
 90: 
 91:             # We're removing a group.
 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