package Apache::PageKit::Param;
# $Id: Param.pm,v 1.5 2001/10/17 21:58:15 borisz Exp $
use strict;
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
# param method - can be called in two forms
# when passed two arguments ($name, $value), it sets the value of the
# $name attributes to $value
# when passwd one argument ($name), retrives the value of the $name attribute
sub param {
my ( $self, @p ) = @_;
unless (@p) {
# the no-parameter case - return list of parameters
return () unless defined($self) && $self->{'pkit_parameters'};
return () unless @{ $self->{'pkit_parameters'} };
return @{ $self->{'pkit_parameters'} };
}
my ( $name, $value );
# deal with case of setting mul. params with hash ref.
if ( ref( $p[0] ) eq 'HASH' ) {
my $hash_ref = shift(@p);
push( @p, %$hash_ref );
}
if ( @p > 1 ) {
die "param called with odd number of parameters" unless ( ( @p % 2 ) == 0 );
while ( ( $name, $value ) = splice( @p, 0, 2 ) ) {
$self->_add_parameter($name);
$self->{$name} = $value;
}
}
else {
$name = $p[0];
}
if (wantarray) {
return () unless exists $self->{$name};
return ref $self->{$name} eq 'ARRAY' ? @{ $self->{$name} } : $self->{$name};
}
return $self->{$name} if defined($name);
}
sub _add_parameter {
my ( $self, $param ) = @_;
return unless defined $param;
push( @{ $self->{'pkit_parameters'} }, $param )
unless defined( $self->{$param} );
}
sub _merge_parameter {
my $self = shift;
while ( my ( $k, $v ) = splice @_, 0, 2 ) {
$self->_add_parameter($k);
unless ( exists $self->{$k} ) {
$self->{$k} = $v;
}
elsif ( ref $self->{$k} eq 'ARRAY' ) {
push @{ $self->{$k} }, $v;
}
else {
$self->{$k} = [ $self->{$k}, $v ];
}
}
}
sub delete {
my ( $self, $param ) = @_;
delete $self->{$param};
my $aref = $self->{'pkit_parameters'} || return;
for ( 0 .. $#$aref ) {
next unless ( $param eq $aref->[$_] );
splice @$aref, $_, 1;
last;
}
}
1;