Skip Menu |
 

Preferred bug tracker

Please visit the preferred bug tracker to report your issue.

This queue is for tickets about the Workflow CPAN distribution.

Report information
The Basics
Id: 21101
Status: resolved
Priority: 0/
Queue: Workflow

People
Owner: jonasbn [...] cpan.org
Requestors: mbell [...] informatik.hu-berlin.de
Cc:
AdminCc:

Bug Information
Severity: Normal
Broken in: (no value)
Fixed in: 0.23



Subject: delete_params for Workflow::Base
Date: Mon, 21 Aug 2006 11:10:32 +0200
To: Bugs in Workflow via RT <bug-Workflow [...] rt.cpan.org>
From: Michael Bell <mbell [...] informatik.hu-berlin.de>
Download (untitled) / with headers
text/plain 850b
Hi, Workflow 0.22 and 0.22+ Perl 5.8.8 Actually (0.22) it is only possible to delete all parameters at once. It is not possible to delete a single parameter or to delete a list of parameters. This functionality is added with the function delete_param. It use a similar interface design like param. I added documentation and some test cases too. Base.pm.22.diff - full diff against v0.22 Base.pm.new.diff - diff which only includes the changes for this fix Best regards Michael -- Show quoted text
_______________________________________________________________ Michael Bell Humboldt-Universitaet zu Berlin Tel.: +49 (0)30-2093 2482 ZE Computer- und Medienservice Fax: +49 (0)30-2093 2704 Unter den Linden 6 michael.bell@cms.hu-berlin.de D-10099 Berlin
_______________________________________________________________
Download base.t.diff
text/x-diff 858b
--- t/base.t.org 2006-08-21 10:47:34.000000000 +0200 +++ t/base.t 2006-08-21 10:56:41.000000000 +0200 @@ -5,7 +5,7 @@ use strict; use lib 't'; use TestUtil; -use Test::More tests => 22; +use Test::More tests => 26; require_ok( 'Workflow::Base' ); @@ -36,6 +36,15 @@ 'Multiple parameter set value 1 ok' ); is( $b->param( 'blah' ), 'blech', 'Multiple parameter set value 2 ok' ); +is( $b->delete_param('baz'), 'quux', + 'Delete one parameter' ); +is( $b->param( 'baz' ), undef, + 'Parameter call to nonexistent key returns undef' ); +my $list = $b->delete_param(['blah']); +is ( $list->{'blah'}, 'blech', + 'Deleted several parameters' ); +is( $b->param( 'blah' ), undef, + 'Parameter call to nonexistent key returns undef' ); ok( $b->clear_params, 'Cleared param call executed ok' ); is( scalar keys %{ $b->param }, 0,
Download Base.pm.new.diff
text/x-diff 1.8k
--- Base.pm.org_new 2006-08-21 10:39:38.000000000 +0200 +++ Base.pm 2006-08-21 11:06:19.000000000 +0200 @@ -50,6 +50,35 @@ return $self->{PARAMS}{ $name } = $value; } +sub delete_param { + my ( $self, $name ) = @_; + unless ( defined $name ) { + ## this is an error - perhaps an exception is too radical + return undef; + } + + # Allow multiple parameters to be deleted at once... + + if ( ref $name eq 'ARRAY' ) { + my %list = (); + foreach my $param_name ( @{ $name } ) { + next if (not exists $self->{PARAMS}{ $param_name }); + $list{$param_name} = $self->{PARAMS}{ $param_name }; + delete $self->{PARAMS}{ $param_name } + } + return { %list }; + } + + if ( exists $self->{PARAMS}{ $name } ) { + my $value = $self->{PARAMS}{ $name }; + delete $self->{PARAMS}{ $name }; + return $value; + } + + ## this is an error - perhaps an exception is too radical + return undef; +} + sub clear_params { my ( $self ) = @_; $self->{PARAMS} = {}; @@ -130,6 +159,29 @@ $object->param( foo => 'blurney' ); +=head3 delete_param( [ $name ] ) + +Delete parameters from this object. + +If C<$name> given and it is an array reference, then delete all +parameters from this object. All deleted parameters will be returned +as a hash reference together with their values. + + my $deleted = $object->delete_param(['foo','baz']); + foreach my $key (keys %{$deleted}) + { + print $key."::=".$deleted->{$key}."\n"; + } + +If C<$name> given and it is not an array reference, delete the +parameter and return the value of the parameter. + + my $value = $object->delete_param( 'foo' ); + print "Value of 'foo' was '$value'\n"; + +If C<$name> is not defined or C<$name> does not exists the +undef is returned. + =head3 clear_params() Clears out all parameters associated with this object.
Download Base.pm.22.diff
text/x-diff 2.2k
--- Base.pm.org 2006-08-21 10:08:24.000000000 +0200 +++ Base.pm 2006-08-21 11:06:19.000000000 +0200 @@ -28,7 +28,7 @@ sub param { my ( $self, $name, $value ) = @_; - unless ( $name ) { + unless ( defined $name ) { return { %{ $self->{PARAMS} } }; } @@ -41,7 +41,7 @@ return { %{ $self->{PARAMS} } }; } - unless ( $value ) { + unless ( defined $value ) { if ( exists $self->{PARAMS}{ $name } ) { return $self->{PARAMS}{ $name }; } @@ -50,6 +50,35 @@ return $self->{PARAMS}{ $name } = $value; } +sub delete_param { + my ( $self, $name ) = @_; + unless ( defined $name ) { + ## this is an error - perhaps an exception is too radical + return undef; + } + + # Allow multiple parameters to be deleted at once... + + if ( ref $name eq 'ARRAY' ) { + my %list = (); + foreach my $param_name ( @{ $name } ) { + next if (not exists $self->{PARAMS}{ $param_name }); + $list{$param_name} = $self->{PARAMS}{ $param_name }; + delete $self->{PARAMS}{ $param_name } + } + return { %list }; + } + + if ( exists $self->{PARAMS}{ $name } ) { + my $value = $self->{PARAMS}{ $name }; + delete $self->{PARAMS}{ $name }; + return $value; + } + + ## this is an error - perhaps an exception is too radical + return undef; +} + sub clear_params { my ( $self ) = @_; $self->{PARAMS} = {}; @@ -130,6 +159,29 @@ $object->param( foo => 'blurney' ); +=head3 delete_param( [ $name ] ) + +Delete parameters from this object. + +If C<$name> given and it is an array reference, then delete all +parameters from this object. All deleted parameters will be returned +as a hash reference together with their values. + + my $deleted = $object->delete_param(['foo','baz']); + foreach my $key (keys %{$deleted}) + { + print $key."::=".$deleted->{$key}."\n"; + } + +If C<$name> given and it is not an array reference, delete the +parameter and return the value of the parameter. + + my $value = $object->delete_param( 'foo' ); + print "Value of 'foo' was '$value'\n"; + +If C<$name> is not defined or C<$name> does not exists the +undef is returned. + =head3 clear_params() Clears out all parameters associated with this object.
Patch applied in release 0.23 jonasbn


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.