package Penguin::Rights;
$VERSION = 3.0;

sub new {
    my ($class, %args) = @_;
    
    $self = { };
    bless $self, $class;
    if ($args{'Filename'}) {
        get $self Filename => $args{'Filename'};
    }
    $self;
}

sub get {
    my ($self, %args) = @_;
    my $filename = $args{'Filename'} || $self->{'filename'}
                                    || "$ENV{'HOME'}/.rightsfile"; # last ditch
    my $user = "default";

    $self->{'filename'} = $filename;
    open(RIGHTSFILE, "<$filename") || die("can't open rightsfile $filename!");
    while(chomp($line = <RIGHTSFILE>)) {
        $line =~ s/#.*//g;  # get rid of comments
        if ($line =~ /^\[(.*)\]/) {
            $user = $1;
            next;
        }
        next unless $line;
        $self->{'Data'}->{$user} .= $line . " "; # delimit?
    }
    close(RIGHTSFILE);
    1;
}

sub save {
    my ($self, %args) = @_;
    my $filename = $args{'Filename'} || $self->{'filename'};

    if (! $filename) {
        die("Rights can't save: no filename provided or implicit");
    }
    open(RIGHTSFILE, ">$filename") || 
                                die "can't save: can't write to $filename!";
    print RIGHTSFILE "# automatically generated.\n";
    foreach $i (sort keys %{ $self->{'Data'} }) {
        print RIGHTSFILE "[$i]\n$self->{'Data'}->{$i}\n";
    }
    close(RIGHTSFILE);
    1;
}

sub set {
    my ($self, %args) = @_;
    my $user = $args{'User'};
    my $rights = $args{'Rights'};
    
    $self->{'Data'}->{$user} = $rights;
    1;
}

sub erase {
    my ($self, %args) = @_;
    my $user = $args{'User'};

    undef $self->{'Data'}->{$user};
    1;
}

sub getrights {
    my ($self, %args) = @_;
    my $user = $args{'User'};

    $self->{'Data'}->{$user} || $self->{'Data'}->{'default'};
}

1;


syntax highlighted by Code2HTML, v. 0.9.1