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:
82: next if is.include?(group) and should.include?(group)
83:
84:
85: modes[group] = :add and next unless is.include?(group)
86:
87:
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