# File lib/puppet/provider/user/ldap.rb, line 70
 70:   def groups=(values)
 71:     should = values.split(",")
 72: 
 73:     if groups == :absent
 74:       is = []
 75:     else
 76:       is = groups.split(",")
 77:     end
 78: 
 79:     modes = {}
 80:     [is, should].flatten.uniq.each do |group|
 81:       # Skip it when they're in both
 82:       next if is.include?(group) and should.include?(group)
 83: 
 84:       # We're adding a group.
 85:       modes[group] = :add and next unless is.include?(group)
 86: 
 87:       # We're removing a group.
 88:       modes[group] = :remove and next unless should.include?(group)
 89:     end
 90: 
 91:     modes.each do |group, form|
 92:       self.fail "Could not find ldap group #{group}" unless ldap_group = group_manager.find(group)
 93: 
 94:       current = ldap_group[:members]
 95: 
 96:       if form == :add
 97:         if current.is_a?(Array) and ! current.empty?
 98:           new = current + [name]
 99:         else
100:           new = [name]
101:         end
102:       else
103:         new = current - [name]
104:         new = :absent if new.empty?
105:       end
106: 
107:       group_manager.update(group, {:ensure => :present, :members => current}, {:ensure => :present, :members => new})
108:     end
109:   end