File Coverage

blib/lib/SmokeRunner/Multi/Validate.pm
Criterion Covered Total %
statement 59 59 100.0
branch 2 4 50.0
condition n/a
subroutine 15 15 100.0
pod n/a
total 76 78 97.4


line stmt bran cond sub pod time code
1             package SmokeRunner::Multi::Validate;
2             our $AUTHORITY = 'cpan:YANICK';
3             #ABSTRACT: Wrapper around Params::Validate for SmokeRunner::Multi
4             $SmokeRunner::Multi::Validate::VERSION = '0.20';
5 8     8   40 use strict;
  8         15  
  8         226  
6 8     8   41 use warnings;
  8         14  
  8         214  
7              
8 8     8   41 use base 'Exporter';
  8         13  
  8         662  
9              
10 8     8   6672 use Params::Validate qw(:types);
  8         72245  
  8         1697  
11 8     8   54 use Scalar::Util qw( blessed );
  8         15  
  8         2383  
12              
13              
14             my %Types;
15             BEGIN
16             {
17             %Types =
18             (
19             DIR_TYPE => { type => SCALAR,
20 48         1500 callbacks => { 'is a dir' => sub { -d $_[0] } },
21             },
22              
23 8     8   1169 TEST_SET_TYPE => { type => OBJECT,
24             isa => 'SmokeRunner::Multi::TestSet',
25             },
26              
27             RUNNER_TYPE => { type => OBJECT,
28             isa => 'SmokeRunner::Multi::Runner',
29             },
30             );
31              
32 8         22 for my $t ( grep {/^[A-Z]+$/} @Params::Validate::EXPORT_OK )
  128         325  
33             {
34 88         173 my $name = $t . '_TYPE';
35 88         3897 $Types{$name} = { type => eval $t };
36             }
37              
38 8         41 for my $t ( keys %Types )
39             {
40 112         132 my %t = %{ $Types{$t} };
  112         341  
41              
42 48 50   48   234 my $sub = sub { die "Invalid additional args for $t: [@_]" if @_ % 2;
43 48         300 return { %t, @_ };
44 112         422 };
45              
46 8     8   40 no strict 'refs';
  8         15  
  8         451  
47 112         145 *{$t} = $sub;
  112         2266  
48             }
49             }
50              
51             our %EXPORT_TAGS = ( types => [ keys %Types ] );
52             our @EXPORT_OK = keys %Types;
53              
54             my %MyExports = map { $_ => 1 }
55             @EXPORT_OK,
56             map { ":$_" } keys %EXPORT_TAGS;
57              
58             sub import
59             {
60 29     29   63 my $class = shift;
61              
62 29         66 my $caller = caller;
63              
64 29         73 my @pv_export = grep { !$MyExports{$_} } @_;
  77         277  
65              
66             {
67 8     8   42 eval <<"EOF";
  8     8   14  
  8     6   284  
  8     4   43  
  8     2   29  
  8     1   307  
  6         34  
  6         12  
  6         263  
  4         22  
  4         8  
  4         165  
  2         10  
  2         4  
  2         80  
  1         11  
  1         1  
  1         39  
  29         52  
  29         2181  
68             package $caller;
69              
70             use Params::Validate qw(@pv_export);
71             EOF
72              
73 29 50       143 die $@ if $@;
74             }
75              
76 29         66 $class->export_to_level( 1, undef, grep { $MyExports{$_} } @_ );
  77         4437  
77             }
78              
79              
80             1;
81              
82             __END__