package HTML::FormHandler::Field::IntRange;
# ABSTRACT: integer range in select list
use Moose;
extends 'HTML::FormHandler::Field::Select';
our $VERSION = '0.01';
has 'label_format' => ( isa => 'Str', is => 'rw', default => '%d' );
has '+range_start' => ( default => 1 );
has '+range_end' => ( default => 10 );
sub build_options {
my $self = shift;
my $start = $self->range_start;
my $end = $self->range_end;
for ( $start, $end ) {
die "Both range_start and range_end must be defined" unless defined $_;
die "Integer ranges must be integers" unless /^\d+$/;
}
die "range_start must be less than range_end" unless $start < $end;
my $format = $self->label_format || die 'IntRange needs label_format';
return [ map { { value => $_, label => sprintf( $format, $_ ) } }
$self->range_start .. $self->range_end ];
}
__PACKAGE__->meta->make_immutable;
use namespace::autoclean;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
HTML::FormHandler::Field::IntRange - integer range in select list
=head1 VERSION
version 0.40059
=head1 DESCRIPTION
This field generates a select list of numbers from 1 to 10. Override the
range_start and range_end for a select list with a different range.
has_field 'age' => ( type => 'IntRange',
range_start => 0, range_end => 100 );
Widget type is 'select'.
=head1 AUTHOR
FormHandler Contributors - see HTML::FormHandler
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Gerda Shank.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut