File Coverage

blib/lib/Evo.pm
Criterion Covered Total %
statement 46 46 100.0
branch 14 16 87.5
condition n/a
subroutine 7 7 100.0
pod n/a
total 67 69 97.1


line stmt bran cond sub pod time code
1             package Evo;
2 67     67   25751 use strict;
  67         159  
  67         1942  
3 67     67   364 use warnings;
  67         161  
  67         2254  
4 67     67   404 use Carp 'croak';
  67         137  
  67         3857  
5 67     67   31817 use Module::Load ();
  67         66849  
  67         1473  
6 67     67   23123 use Evo::Attr;
  67         205  
  67         33865  
7              
8              
9             my $ARGS_RX = qr/[\s\(\[]* ( [^\)\]]*?) [\s\)\]]*/x;
10             my $EMPTY_ARGS = qr/\s*\(\s*\)\s*/x;
11              
12             sub _parse {
13 2533     2533   5821 my ($caller, $val) = @_;
14 2533         4022 my $orig = $val;
15 2533         5834 $val =~ tr/\n/ /;
16 2533         11502 $val =~ s/^\s+|\s+$//g;
17              
18 2533         23090 $val =~ /^ ((\-|\/?(:{2})?)? $Evo::Internal::Util::RX_PKG_NOT_FIRST*) (.*)$/x;
19 2533 100       9759 croak qq#Can't parse string "$orig"# unless $1;
20 2532         7806 my ($class, $args) = (Evo::Internal::Util::resolve_package($caller, $1), $4);
21              
22             # ()
23 2532 100       10864 return ($class, 1) if $args =~ $EMPTY_ARGS;
24              
25 2460         20247 $args =~ s/^$ARGS_RX$/$1/;
26 2460 100       10633 return ($class, 0) unless $args;
27              
28 810         2983 my @args = split /[,\s]+/, $args;
29 810         4094 ($class, 0, @args);
30             }
31              
32             sub import {
33 842     842   181265 shift;
34 842         3299 my ($target, $filename, $line) = caller;
35              
36 842         4876 Evo::Attr->patch_package($target);
37              
38 842         2552 my @list = @_;
39 842 50       1942 unshift @list, '-Default' unless grep { $_ && $_ eq '-Default' } @list;
  827 50       6272  
40              
41             # trim
42 842         1928 @list = grep {$_} map { my $s = $_; $s =~ s/^\s+|\s+$//g; $s } map { split /[;,]/, $_ } @list;
  2498         5132  
  2498         4054  
  2498         9732  
  2498         5303  
  1669         7021  
43 842         2151 foreach my $key (@list) {
44 2497         14699 my ($src, $empty, @args) = _parse($target, $key);
45 2496         9032 Module::Load::load($src);
46 2496 100       885523 next if $empty;
47 2426 100       37615 if (my $import = $src->can('import')) {
    100          
48 1978         6929 Evo::Internal::Util::inject(
49             package => $target,
50             line => $line,
51             filename => $filename,
52             code => $import
53             )->($src, @args);
54             }
55             elsif (@args) {
56 1         119 croak qq{Got import arguments but "$src" doesn't have an "import" method};
57             }
58             }
59             }
60              
61              
62             our $VERSION = '0.0404'; # VERSION
63              
64             1;
65              
66             # ABSTRACT: Evo - the next generation development framework
67              
68             __END__