1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
package HTML::FormFu::Constraint::DateTime;
use Moose;
extends 'HTML::FormFu::Constraint';
use DateTime::Format::Builder;
has _builder => (
is => 'rw',
default => sub { DateTime::Format::Builder->new },
lazy => 1,
);
sub parser {
my $self = shift;
$self->_builder->parser(@_);
return $self;
}
sub constrain_value {
my ( $self, $value ) = @_;
return 1 if !defined $value || $value eq '';
my $dt = $self->_builder->parse_datetime($value);
return 1;
}
sub clone {
my $self = shift;
my $clone = $self->SUPER::clone(@_);
$clone->_builder( $self->_builder->clone );
return $clone;
}
__PACKAGE__->meta->make_immutable;
1;
__END__
=head1 NAME
HTML::FormFu::Constraint::DateTime - DateTime constraint
=head1 SYNOPSIS
---
elements:
- type: Text
name: start_date
constraints:
- type: DateTime
parser:
strptime: '%d-%m-%Y'
- type: Text
name: end_time
constraints:
- type: DateTime
parser:
regex: !!perl/regexp '^(\d{2}) - (\d{2}) - (\d{4})$'
params: [day, month, year]
An example of using the same parser declaration for both a DateTime
constraint and a DateTime inflator, using YAML references:
---
elements:
- type: Text
name: date
constraints:
- type: DateTime
parser: &PARSER
strptime: '%d-%m-%Y'
inflators:
- type: DateTime
parser: *PARSER
=head1 DESCRIPTION
Ensure input can later be inflated to a DateTime object.
=head1 METHODS
=head2 parser
Arguments: \%args
Required. Define the expected input string, so L<DateTime::Format::Builder>
knows how to turn it into a L<DateTime> object.
Accepts arguments to be passed to L<DateTime::Format::Builder/parser>.
=head1 AUTHOR
Carl Franks, C<cfranks@cpan.org>
=head1 LICENSE
This library is free software, you can redistribute it and/or modify it under
the same terms as Perl itself.
=cut
|