NAME

Set::Groups - A set of groups.

SYNOPSIS

use Set::Groups ;

# create a set of groups
$groups = new Set::Groups ;

# create a group MyGroup with a single member
$groups->addSingleTo("single1","MyGroup") ;

# add 2 singles members into MyGroup
$groups->addSinglesTo(["single2","single3"],"MyGroup") ;

# add a group member into MyGroup
$groups->addGroupTo("Member1Group","MyGroup") ; 

# add 2 group members into MyGroup
$groups->addGroupsTo(["Member2Group","Member3Group"],"MyGroup") ; 

# add a single members into the previous member groups
$groups->addSingleTo("single4","Member1Group") ;
$groups->addSingleTo("single5","Member2Group") ;
$groups->addSingleTo("single6","Member3Group") ;

# flatten the group MyGroup
@singles = $groups->getSinglesOf("MyGroup") ;  
$present = $groups->isSingleOf("single4","MyGroup") ; 

DESCRIPTION

The Groups object implements a set of groups. Each group can own single members and group members. A group can be flattened, i.e. expansed until each of his members is a single one.

CONSTRUCTORS

new

Create a new group set.

my $groups = new Set::Groups

INSTANCE METHODS

Set management

newGroup

Create a new empty group and add it in the set. A group is everything which can be a key of a hash. NewGroup returns 0 if this group already exists, 1 otherwise.

$groups->newGroup("a_group") ;
$groups->newGroup(1) ;

deleteGroup

Delete a group from the set. Return 1 on success, 0 oterhwise.

$groups->deleteGroup("a_group") ;

getGroups

Return the list of the groups present into the set.

@groups = $groups->getGroups() ; 

hasGroup

Check if a group is present into the set.

$present = $groups->hasGroup("a_group") ;

Groups management

addSingleTo

Add a single member to a group. A single is everything which can be a key of a hash. If the group doesn't exist in the set, it is created.

$groups->addSingleTo("single","a_group") ;

addSinglesTo

Add a list of single members to a group. If the group doesn't exist in the set, it is created.

$groups->addSinglesTo(["single1","single2"],"a_group") ;

addGroupTo

Add a group member to a group. If the embedding group doesn't exist in the set, it is created. If the member group doesn't exist in the set, it is created as an empty group.

$groups->addGroupTo("group_member","a_group") ;

addGroupsTo

Add a list of group members to a group. If the embedding group doesn't exist in the set, it is created. If the member group doesn't exist in the set, it is created as an empty group.

$groups->addGroupsTo(["group_member1","group_member2"],"a_group") ;

isOwnSingleOf

Check if a single is a own member of a group.

$present = $groups->isOwnSingleOf("single","a_group") ;

isGroupOf

Check if a group is member of a group.

$present = $groups->isGroupOf("a_group_member","a_group") ;

isSingleOf

Check if a single is a (own or not) member of a group.

$present = $groups->isSingleOf("single","a_group") ;

getOwnSinglesOf

Return the list of own singles of a group.

@singles = $groups->getOwnSinglesOf("a_group") ;

getGroupsOf

Return the list of groups of a group.

@groups = $groups->getGroupsOf("a_group") ;

getSinglesOf

Return the list of (own or not) singles of a group.

@singles = $groups->getSinglesOf("a_group") ;

removeSingleFrom

Remove a single from a group. Return 1 on success, 0 otherwise.

$groups->removeSingleFrom("single","a_group") ;

removeGroupFrom

Remove a group member from a group. Return 1 on success, 0 otherwise.

$groups->removeGroupFrom("a_member_group","a_group") ;

EXAMPLES

Suppose a group file like :

admin:root,adm
system:@admin,operator
team:piotr,lioudmila,adam,annette,jacquelin
true-users:james,sophie,@team,mohammed
everybody:@system,@true-users
daemon:apache,smmsp,named,daemon
virtual:nobody,halt,@daemon
all:@everybody,@virtual

where @name means group named name, then the following code :

use Set::Groups ;

my $groups = new Set::Groups ;
while(<F>)
{
  ($group,$members) = /^(\S+):(.*)$/ ;
  @members = split(/,/,$members) ;
  for $member (@members)
  {
    if ($member=~/^@/)
    {
      $member=~s/^@// ;
      $groups->addGroupTo($member,$group) ;
    }
    else
    {
      $groups->addSingleTo($member,$group) ;
    }
  }
}
print join(', ',$groups->getSinglesOf("all")) ;

gives : apache, sophie, jacquelin, lioudmila, mohammed, smmsp, nobody, adm, annette, operator, james, named, adam, halt, root, daemon, piotr

AUTHOR

Jacquelin Charbonnel, <jacquelin.charbonnel at math.cnrs.fr>

BUGS

Please report any bugs or feature requests to bug-dir-which at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Dir-Which. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc Dir::Which

You can also look for information at:

ACKNOWLEDGEMENTS

Dir::Which is inspired by File::SearchPath written by Tim Jenness. Thanks to Tim for allowing me to reuse his idea.

COPYRIGHT & LICENSE

Copyright Jacquelin Charbonnel <jacquelin.charbonnel at math.cnrs.fr>

This software is governed by the CeCILL-C license under French law and abiding by the rules of distribution of free software. You can use, modify and/ or redistribute the software under the terms of the CeCILL-C license as circulated by CEA, CNRS and INRIA at the following URL "http://www.cecill.info".

As a counterpart to the access to the source code and rights to copy, modify and redistribute granted by the license, users are provided only with a limited warranty and the software's author, the holder of the economic rights, and the successive licensors have only limited liability.

In this respect, the user's attention is drawn to the risks associated with loading, using, modifying and/or developing or reproducing the software by the user in light of its specific status of free software, that may mean that it is complicated to manipulate, and that also therefore means that it is reserved for developers and experienced professionals having in-depth computer knowledge. Users are therefore encouraged to load and test the software's suitability as regards their requirements in conditions enabling the security of their systems and/or data to be ensured and, more generally, to use and operate it in the same conditions as regards security.

The fact that you are presently reading this means that you have had knowledge of the CeCILL-C license and that you accept its terms.