File Coverage

blib/lib/Data/Tubes/Plugin/Util.pm
Criterion Covered Total %
statement 55 72 76.3
branch 15 32 46.8
condition 7 13 53.8
subroutine 11 12 91.6
pod 3 3 100.0
total 91 132 68.9


line stmt bran cond sub pod time code
1             package Data::Tubes::Plugin::Util;
2              
3             # vim: ts=3 sts=3 sw=3 et ai :
4              
5 30     30   208 use strict;
  30         57  
  30         978  
6 30     30   152 use warnings;
  30         60  
  30         802  
7 30     30   147 use English qw< -no_match_vars >;
  30         66  
  30         171  
8 30     30   11455 use Data::Dumper;
  30         5933  
  30         2101  
9             our $VERSION = '0.738';
10              
11 30     30   15292 use Template::Perlish;
  30         117239  
  30         180  
12 30     30   1474 use Log::Log4perl::Tiny qw< :easy :dead_if_first get_logger >;
  30         74  
  30         284  
13 30     30   11325 use Data::Tubes::Util qw< normalize_args read_file tube >;
  30         73  
  30         1877  
14              
15 30     30   189 use Exporter qw< import >;
  30         59  
  30         18061  
16             our @EXPORT_OK = qw< identify log_helper read_file tubify >;
17              
18             sub identify {
19 198     198 1 676 my ($args, $opts) = @_;
20 198   50     502 $args //= {};
21 198   100     1466 $opts //= $args->{identification} // {};
      33        
22              
23 198         390 my $name = $args->{name};
24 198 100       492 $name = '*unknown*' unless defined $name;
25              
26 198         752 my @caller_fields = qw<
27             package
28             filename
29             line
30             subroutine
31             hasargs
32             wantarray
33             evaltext
34             is_require
35             hints
36             bitmask
37             hintsh
38             >;
39 198         296 my %caller;
40              
41 198 100       548 if (exists $opts->{caller}) {
42 5         8 @caller{@caller_fields} = @{$opts->{caller}};
  5         32  
43             }
44             else {
45 193         431 my $level = $opts->{level};
46 193 50       547 $level = 1 unless defined $level;
47 193         1984 @caller{@caller_fields} = caller($level);
48             }
49              
50 198         2245 my $message = $opts->{message};
51 198 50       541 $message = 'building [% name %] as [% subroutine %]'
52             unless defined $message;
53              
54 198 50       368 my $tp = Template::Perlish->new(%{$opts->{tp_opts} || {}});
  198         1588  
55 198         7085 $message = $tp->process(
56             $message,
57             {
58             %caller,
59             name => $name,
60             args => $args,
61             opts => $opts,
62             }
63             );
64              
65 198         675991 my $loglevel = $opts->{loglevel};
66 198 50       776 $loglevel = $DEBUG unless defined $loglevel;
67 198         899 get_logger->log($loglevel, $message);
68              
69 198         3413 return;
70             } ## end sub identify
71              
72             sub log_helper {
73 17     17 1 36 my ($args, $opts) = @_;
74 17   33     93 $opts //= $args->{logger};
75 17 50       48 return unless $opts;
76 0 0       0 return $opts if ref($opts) eq 'CODE';
77              
78             # generate one
79 0         0 my $name = $args->{name};
80 0 0       0 $name = '*unknown*' unless defined $name;
81              
82 0         0 my $message = $opts->{message};
83 0 0       0 $message = '==> [% args.name %]' unless defined $message;
84              
85 0 0       0 my $tp = Template::Perlish->new(%{$opts->{tp_opts} || {}});
  0         0  
86 0         0 $message = $tp->compile($message);
87              
88 0         0 my $logger = get_logger();
89 0         0 my $loglevel = $opts->{loglevel};
90 0 0       0 $loglevel = $DEBUG unless defined $loglevel;
91              
92             return sub {
93 0     0   0 my $level = $logger->level();
94 0 0       0 return if $level < $loglevel;
95 0         0 my $record = shift;
96 0         0 my $rendered =
97             $tp->evaluate($message,
98             {record => $record, args => $args, opts => $opts});
99 0         0 $logger->log($loglevel, $rendered);
100 0         0 };
101             } ## end sub log_helper
102              
103             sub tubify {
104 52     52 1 5270 my $opts = {};
105 52 100 66     349 $opts = shift(@_) if (@_ && ref($_[0]) eq 'HASH');
106             map {
107 101         206 my $ref = ref $_;
108 101 100       435 ($ref eq 'CODE')
    100          
109             ? $_
110             : tube($opts, ($ref eq 'ARRAY') ? @$_ : $_)
111 52         135 } grep { $_ } @_;
  103         213  
112             } ## end sub tubify
113              
114             1;