package Field::Duration; use Moose; extends 'HTML::FormHandler::Field::Compound'; use DateTime; our $VERSION = '0.01'; # override validate sub validate { my ( $self ) = @_; # get field name my $name = $self->name; my %duration; my $found = 0; my @dur_parms; my $fieldname; my $input = $self->input; for my $child ( $self->children ) { next unless exists $input->{$child->accessor}; $found++; my $input = $self->input->{$child->accessor}; unless ( $input =~ /^\d+$/ ) { $self->add_error( "Invalid value for " . $self->label . " " . $child->label ); next; } push @dur_parms, ($child->accessor => $input); $child->value( $input ); } # Check that some subfield has been entered if ( $self->required ) { unless ( $found ) { $self->add_error( "Duration is required" ); return; } } # set the value my $duration = DateTime::Duration->new(@dur_parms); $self->value($duration); } =head1 NAME HTML::FormHandler::Field::Duration - Produces DateTime::Duration from HTML form values =cut 1;