Blame lib/DateTime/Format/Builder/Parser/Strptime.pm

Packit 9002b2
package DateTime::Format::Builder::Parser::Strptime;
Packit 9002b2
{
Packit 9002b2
  $DateTime::Format::Builder::Parser::Strptime::VERSION = '0.81';
Packit 9002b2
}
Packit 9002b2
Packit 9002b2
Packit 9002b2
use strict;
Packit 9002b2
use warnings;
Packit 9002b2
use vars qw( @ISA );
Packit 9002b2
use DateTime::Format::Strptime 1.04;
Packit 9002b2
use Params::Validate qw( validate SCALAR HASHREF );
Packit 9002b2
Packit 9002b2
use DateTime::Format::Builder::Parser::generic;
Packit 9002b2
@ISA = qw( DateTime::Format::Builder::Parser::generic );
Packit 9002b2
Packit 9002b2
__PACKAGE__->valid_params(
Packit 9002b2
    strptime => {
Packit 9002b2
        type => SCALAR
Packit 9002b2
            | HASHREF,    # straight pattern or options to DTF::Strptime
Packit 9002b2
    },
Packit 9002b2
);
Packit 9002b2
Packit 9002b2
sub create_parser {
Packit 9002b2
    my ( $self, %args ) = @_;
Packit 9002b2
Packit 9002b2
    # Arguments to DTF::Strptime
Packit 9002b2
    my $pattern = $args{strptime};
Packit 9002b2
Packit 9002b2
    # Create our strptime parser
Packit 9002b2
    my $strptime = DateTime::Format::Strptime->new(
Packit 9002b2
        ( ref $pattern ? %$pattern : ( pattern => $pattern ) ),
Packit 9002b2
    );
Packit 9002b2
    unless ( ref $self ) {
Packit 9002b2
        $self = $self->new(%args);
Packit 9002b2
    }
Packit 9002b2
    $self->{strptime} = $strptime;
Packit 9002b2
Packit 9002b2
    # Create our parser
Packit 9002b2
    return $self->generic_parser(
Packit 9002b2
        (
Packit 9002b2
            map { exists $args{$_} ? ( $_ => $args{$_} ) : () }
Packit 9002b2
                qw(
Packit 9002b2
                on_match on_fail preprocess postprocess
Packit 9002b2
                )
Packit 9002b2
        ),
Packit 9002b2
        label => $args{label},
Packit 9002b2
    );
Packit 9002b2
}
Packit 9002b2
Packit 9002b2
sub do_match {
Packit 9002b2
    my $self = shift;
Packit 9002b2
    my $date = shift;
Packit 9002b2
    local $^W;    # bizarre bug
Packit 9002b2
                  # Do the match!
Packit 9002b2
    my $dt = eval { $self->{strptime}->parse_datetime($date) };
Packit 9002b2
    return $@ ? undef : $dt;
Packit 9002b2
}
Packit 9002b2
Packit 9002b2
sub post_match {
Packit 9002b2
    return $_[2];
Packit 9002b2
}
Packit 9002b2
Packit 9002b2
1;
Packit 9002b2
Packit 9002b2
# ABSTRACT: strptime based date parsing
Packit 9002b2
Packit 9002b2
__END__
Packit 9002b2
Packit 9002b2
=pod
Packit 9002b2
Packit 9002b2
=head1 NAME
Packit 9002b2
Packit 9002b2
DateTime::Format::Builder::Parser::Strptime - strptime based date parsing
Packit 9002b2
Packit 9002b2
=head1 VERSION
Packit 9002b2
Packit 9002b2
version 0.81
Packit 9002b2
Packit 9002b2
=head1 SYNOPSIS
Packit 9002b2
Packit 9002b2
   my $parser = DateTime::Format::Builder->create_parser(
Packit 9002b2
	strptime => '%e/%b/%Y:%H:%M:%S %z',
Packit 9002b2
   );
Packit 9002b2
Packit 9002b2
=head1 SPECIFICATION
Packit 9002b2
Packit 9002b2
=over 4
Packit 9002b2
Packit 9002b2
=item *
Packit 9002b2
Packit 9002b2
B<strptime> takes as its argument a strptime string.
Packit 9002b2
See L<DateTime::Format::Strptime> for more information
Packit 9002b2
on valid patterns.
Packit 9002b2
Packit 9002b2
=back
Packit 9002b2
Packit 9002b2
=head1 SUPPORT
Packit 9002b2
Packit 9002b2
See L<DateTime::Format::Builder> for details.
Packit 9002b2
Packit 9002b2
=head1 SEE ALSO
Packit 9002b2
Packit 9002b2
C<datetime@perl.org> mailing list.
Packit 9002b2
Packit 9002b2
http://datetime.perl.org/
Packit 9002b2
Packit 9002b2
L<perl>, L<DateTime>,
Packit 9002b2
L<DateTime::Format::Builder>
Packit 9002b2
Packit 9002b2
=head1 AUTHORS
Packit 9002b2
Packit 9002b2
=over 4
Packit 9002b2
Packit 9002b2
=item *
Packit 9002b2
Packit 9002b2
Dave Rolsky <autarch@urth.org>
Packit 9002b2
Packit 9002b2
=item *
Packit 9002b2
Packit 9002b2
Iain Truskett
Packit 9002b2
Packit 9002b2
=back
Packit 9002b2
Packit 9002b2
=head1 COPYRIGHT AND LICENSE
Packit 9002b2
Packit 9002b2
This software is Copyright (c) 2013 by Dave Rolsky.
Packit 9002b2
Packit 9002b2
This is free software, licensed under:
Packit 9002b2
Packit 9002b2
  The Artistic License 2.0 (GPL Compatible)
Packit 9002b2
Packit 9002b2
=cut