File Coverage

blib/lib/DateTime/Format/Builder/Parser/Dispatch.pm
Criterion Covered Total %
statement 33 34 97.0
branch 6 10 60.0
condition 3 6 50.0
subroutine 8 8 100.0
pod 0 1 0.0
total 50 59 84.7


line stmt bran cond sub pod time code
1             package DateTime::Format::Builder::Parser::Dispatch;
2             {
3             $DateTime::Format::Builder::Parser::Dispatch::VERSION = '0.81';
4             }
5 24     24   132 use strict;
  24         46  
  24         989  
6 24     24   129 use warnings;
  24         46  
  24         733  
7 24     24   113 use vars qw( %dispatch_data );
  24         39  
  24         1009  
8 24     24   129 use Params::Validate qw( CODEREF validate );
  24         36  
  24         1377  
9 24     24   130 use DateTime::Format::Builder::Parser;
  24         50  
  24         789  
10              
11              
12              
13             {
14 24     24   109 no strict 'refs';
  24         35  
  24         12530  
15             *dispatch_data = *DateTime::Format::Builder::dispatch_data;
16             *params = *DateTime::Format::Builder::Parser::params;
17             }
18              
19             DateTime::Format::Builder::Parser->valid_params(
20             Dispatch => {
21             type => CODEREF,
22             }
23             );
24              
25             sub create_parser {
26 2     2 0 40 my ( $self, %args ) = @_;
27 2         4 my $coderef = $args{Dispatch};
28              
29             return sub {
30 3     3   6 my ( $self, $date, $p, @args ) = @_;
31 3 50       9 return unless defined $date;
32 3   33     12 my $class = ref($self) || $self;
33              
34 3         107 my @results = $coderef->($date);
35 3 50       18 return unless @results;
36 3 50       10 return unless defined $results[0];
37              
38 3         7 for my $group (@results) {
39 4         13 my $parser = $dispatch_data{$class}{$group};
40 4 50       12 die "Unknown parsing group: $class\n" unless defined $parser;
41 4         6 my $rv = eval { $parser->parse( $self, $date, $p, @args ) };
  4         18  
42 4 100 66     83 return $rv unless $@ or not defined $rv;
43             }
44 0           return;
45 2         23 };
46             }
47              
48             1;
49              
50             # ABSTRACT: Dispatch parsers by group
51              
52             __END__