class CF::UAA::GroupCli

Public Instance Methods

add_members(scim, name, members) click to toggle source
# File lib/uaa/cli/group.rb, line 144
def add_members(scim, name, members)
  group = scim_get_object(scim, :group, gname(name))

  old_members = (group['members'] || [])
  new_members = find_members(scim, members).map do |member|
    member.merge('origin' => 'uaa')
  end

  unless new_members.size == members.size
    raise 'not all users found, none added'
  end

  group['members'] = union(old_members, new_members)

  unless group['members'].size > old_members.size
    raise 'no new users given'
  end

  scim.put(:group, group)
  'success'
end
delete_members(scim, name, members) click to toggle source
# File lib/uaa/cli/group.rb, line 166
def delete_members(scim, name, members)
  group = scim_get_object(scim, :group, gname(name))

  old_members = (group['members'] || [])
  new_members = find_members(scim, members)

  unless new_members.size == members.size
    raise 'not all users found, none deleted'
  end

  group['members'] = difference(old_members, new_members)

  unless group['members'].size < old_members.size
    raise 'no existing users to delete'
  end

  group.delete('members') if group['members'].empty?

  scim.put(:group, group)
  'success'
end
difference(old_members, new_members) click to toggle source
# File lib/uaa/cli/group.rb, line 136
def difference(old_members, new_members)
  new_ids = id_set(new_members)

  old_members.reject do |member|
    new_ids.include?(member['value'])
  end
end
find_members(scim, members) click to toggle source
# File lib/uaa/cli/group.rb, line 109
def find_members(scim, members)
  found_members = []

  scim.ids(:user, *members).each do |member|
    found_members << {
        'type' => 'USER',
        'value' => member['id'],
        'origin' => member['origin']
    }
  end

  found_members
end
gname(name) click to toggle source
# File lib/uaa/cli/group.rb, line 24
def gname(name) name || ask("Group name") end
id_set(objs) click to toggle source
# File lib/uaa/cli/group.rb, line 101
def id_set(objs)
  objs.each_with_object(Set.new) {|o, s|
    id = o.is_a?(String)? o: (o["id"] || o["value"] || o["memberid"])
    raise BadResponse, "no id found in response of current members" unless id
    s << id
  }
end
union(old_members, new_members) click to toggle source
# File lib/uaa/cli/group.rb, line 123
def union(old_members, new_members)
  old_ids = id_set(old_members)
  all_members = old_members.clone

  new_members.each do |member|
    unless old_ids.include?(member['value'])
      all_members << member
    end
  end

  all_members
end

Private Instance Methods

is_integer?(input) click to toggle source
# File lib/uaa/cli/group.rb, line 201
def is_integer?(input)
  input && (input.to_i.to_s == input)
end
is_natural_number?(input) click to toggle source
# File lib/uaa/cli/group.rb, line 197
def is_natural_number?(input)
  is_integer?(input) && input.to_i > -1
end