File Coverage

blib/lib/Data/Sah/Format.pm
Criterion Covered Total %
statement 30 34 88.2
branch 4 8 50.0
condition n/a
subroutine 6 6 100.0
pod 1 1 100.0
total 41 49 83.6


line stmt bran cond sub pod time code
1             package Data::Sah::Format;
2              
3             our $DATE = '2016-06-13'; # DATE
4             our $VERSION = '0.001'; # VERSION
5              
6 1     1   391 use 5.010001;
  1         2  
7 1     1   3 use strict 'subs', 'vars';
  1         1  
  1         19  
8 1     1   2 use warnings;
  1         1  
  1         16  
9 1     1   620 use Log::Any::IfLOG '$log';
  1         9  
  1         4  
10              
11 1     1   328 use Data::Sah::FormatCommon;
  1         1  
  1         227  
12              
13             our %SPEC;
14              
15             our $Log_Formatter_Code = $ENV{LOG_SAH_FORMATTER_CODE} // 0;
16              
17             $SPEC{gen_formatter} = {
18             v => 1.1,
19             summary => 'Generate formatter code',
20             args => {
21             %Data::Sah::FormatterCommon::gen_formatter_args,
22             },
23             result_naked => 1,
24             };
25             sub gen_formatter {
26 10     10 1 90572 my %args = @_;
27              
28 10         14 my $format = $args{format};
29 10         16 my $pkg = "Data::Sah::Format::perl\::$format";
30 10         42 (my $pkg_pm = "$pkg.pm") =~ s!::!/!g;
31              
32 10         872 require $pkg_pm;
33              
34 10         40 my $fmt = &{"$pkg\::format"}(
35             data_term => '$data',
36 10         24 (args => $args{formatter_args}) x !!defined($args{formatter_args}),
37             );
38              
39 10         9 my $code;
40              
41 10         9 my $code_require .= '';
42             #my %mem;
43 10 50       18 if ($fmt->{modules}) {
44 0         0 for my $mod (keys %{$fmt->{modules}}) {
  0         0  
45             #next if $mem{$mod}++;
46 0         0 $code_require .= "require $mod;\n";
47             }
48             }
49              
50 10         26 $code = join(
51             "",
52             $code_require,
53             "sub {\n",
54             " my \$data = shift;\n",
55             " $fmt->{expr};\n",
56             "}",
57             );
58              
59 10 50       15 if ($Log_Formatter_Code) {
60 0         0 $log->tracef("Formatter code (gen args: %s): %s", \%args, $code);
61             }
62              
63 10 50       13 return $code if $args{source};
64              
65 10         1249 my $formatter = eval $code;
66 10 50       21 die if $@;
67 10         48 $formatter;
68             }
69              
70             1;
71             # ABSTRACT: Formatter for Data::Sah
72              
73             __END__