File Coverage

blib/lib/DateTime/Format/Bork.pm
Criterion Covered Total %
statement 50 50 100.0
branch 12 12 100.0
condition n/a
subroutine 7 7 100.0
pod 1 1 100.0
total 70 70 100.0


line stmt bran cond sub pod time code
1             package DateTime::Format::Bork;
2              
3 3     3   123701 use strict;
  3         7  
  3         133  
4              
5 3     3   22 use vars qw( $VERSION );
  3         5  
  3         1252  
6             $VERSION = '0.02';
7              
8             use DateTime::Format::Builder(
9 3         72 parsers => {
10             debork => [
11             {
12             regex => qr/^
13             ( -? (?:Bork\s*){0,9} , (?:Bork\s*){0,9}
14             , (?:Bork\s*){0,9} , (?:Bork\s*){0,9} )
15             - ( (?:Bork\s*){0,9} , (?:Bork\s*){0,9} )
16             - ( (?:Bork\s*){0,9} , (?:Bork\s*){0,9} )
17             T ( (?:Bork\s*){0,9} , (?:Bork\s*){0,9} )
18             : ( (?:Bork\s*){0,9} , (?:Bork\s*){0,9} )
19             : ( (?:Bork\s*){0,9} , (?:Bork\s*){0,9} )
20             $/ix,
21             params => [ qw( year month day hour minute second ) ],
22             postprocess => \&_unbork,
23             extra => { time_zone => 'UTC' },
24             },
25             ],
26             }
27 3     3   3479 );
  3         913818  
28              
29             sub bork {
30 4     4 1 3208 my( $self, $dt ) = @_;
31              
32 4         16 $dt = $dt->clone->set_time_zone( 'UTC' );
33              
34 4         668 my $borking;
35 4         14 $borking .= _bork( sprintf( "%04d", $dt->year ) ) . "-";
36 4         17 $borking .= _bork( sprintf( "%02d", $dt->month ) ) . "-";
37 4         25 $borking .= _bork( sprintf( "%02d", $dt->day ) ) . "T";
38 4         19 $borking .= _bork( sprintf( "%02d", $dt->hour ) ) . ":";
39 4         16 $borking .= _bork( sprintf( "%02d", $dt->minute ) ) . ":";
40 4         15 $borking .= _bork( sprintf( "%02d", $dt->second ) );
41              
42 4         32 return $borking;
43             }
44              
45             sub _unbork {
46 4     4   3300 my %p = @_;
47              
48 4         6 foreach my $key ( keys %{ $p{ parsed } } ) {
  4         13  
49 24         52 $p{ parsed }{ $key } = _count_bork( $p{ parsed }{ $key } );
50             }
51              
52 4         20 return 1;
53             }
54              
55             sub _count_bork {
56 24     24   27 my $borked = shift;
57            
58 24         22 my $neg;
59 24 100       56 if ( $borked =~ s/-// ) {
60 1         2 $neg = 1;
61             }
62              
63 24         60 my @digits = split( /,/, $borked );
64              
65 24         25 my $n;
66 24         37 foreach ( @digits ) {
67 38         199 $n .= my @count = $_ =~ /(Bork)/ig;
68             }
69              
70 24 100       46 if( $neg ) {
71 1         4 $n *= -1;
72             }
73              
74 24 100       33 if ( defined $n ) {
75 16         50 return $n;
76             } else {
77 8         26 return 0;
78             }
79             }
80              
81             sub _bork {
82 24     24   169 my $prebork = shift;
83              
84 24         26 my $neg;
85 24 100       91 if ( $prebork =~ s/-// ) {
86 1         3 $neg = "-";
87             }
88              
89 24         69 my @digits = split( //, $prebork );
90              
91 24         33 my( $postbork, $i ) = $neg;
92 24         42 foreach ( @digits ) {
93 56 100       92 if ( $_ ) {
94 31         84 $postbork .= "Bork " x ( $_ - 1 ) . "Bork";
95             }
96              
97 56         64 $i++;
98             } continue {
99 56 100       151 if ( $i < @digits ) {
100 32         51 $postbork .= ",";
101             }
102             }
103              
104 24         80 return $postbork;
105             }
106              
107             1;
108              
109             __END__