Subject: | Wrong accessor and implemented is_required="yes" |
Date: | Mon, 07 Aug 2006 11:33:59 +0200 |
To: | bug-Workflow [...] rt.cpan.org |
From: | Michael Bell <michael.bell [...] cms.hu-berlin.de> |
Message body not shown because it is not plain text.
Hi,
Workflow version: 0.21
Perl version: 5.8.8
uname -a: Linux XXX 2.6.17-1-686 #1 SMP ..date.. i686 GNU/Linux
I fixed two bugs.
1. There are two functions - required_fields and optional_fields which
should return the required and the optional fields. Both functions use
the internal variable type which is wrong because
Workflow::Action::InputField has an accessor for exactly this
information. The accessor is the function requirement.
2. The documentation of Workflow::Validator::HasRequiredField announces
that is_required="yes" in a field specification automatically creates
the necessary validator. The code for this feature is simply missing. I
added the missing code in front of the normal validator initialization.
I attached the patch. If you have any questions or doubts please be free
to contact me. If I do something wrong then I'm willing to fix this.
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
_______________________________________________________________
--- /usr/local/share/perl/5.8.4/Workflow/Action.pm.org 2006-07-18 09:44:17.000000000 +0200
+++ /usr/local/share/perl/5.8.4/Workflow/Action.pm 2006-07-18 12:11:04.000000000 +0200
@@ -10,6 +10,7 @@
use base qw( Workflow::Base );
use Log::Log4perl qw( get_logger );
use Workflow::Action::InputField;
+use Workflow::Validator::HasRequiredField;
use Workflow::Factory qw( FACTORY );
$Workflow::Action::VERSION = sprintf("%d.%02d", q$Revision: 1.6 $ =~ /(\d+)\.(\d+)/);
@@ -27,12 +28,12 @@
sub required_fields {
my ( $self ) = @_;
- return grep { $_->{type} eq 'required' } @{ $self->{_fields} };
+ return grep { $_->requirement() eq 'required' } @{ $self->{_fields} };
}
sub optional_fields {
my ( $self ) = @_;
- return grep { $_->{type} eq 'optional' } @{ $self->{_fields} };
+ return grep { $_->requirement() eq 'optional' } @{ $self->{_fields} };
}
sub fields {
@@ -102,11 +103,31 @@
$self->name( $copy_params{name} );
$self->description( $copy_params{description} );
+ ## init normal fields
my @fields = $self->normalize_array( $copy_params{field} );
foreach my $field_info ( @fields ) {
$self->add_fields( Workflow::Action::InputField->new( $field_info ) );
}
+ ## establish validator for fields with is_required="yes"
+ @fields = $self->required_fields();
+ my $validator = Workflow::Validator::HasRequiredField->new (
+ {
+ name => 'HasRequiredField for is_required fields',
+ class => 'Workflow::Validator::HasRequiredField'
+ });
+ my @args = ();
+ foreach my $field ( @fields ) {
+ next if (not $field); ## empty @fields array
+ push @args, $field->name();
+ }
+ push @{ $self->{_validators} },
+ {
+ validator => $validator,
+ args => \@args
+ };
+
+ ## init normal validators
my @validator_info = $self->normalize_array( $copy_params{validator} );
$self->add_validators( @validator_info );