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-17'; # DATE
4             our $VERSION = '0.002'; # VERSION
5              
6 2     2   29 use 5.010001;
  2         5  
7 2     2   7 use strict 'subs', 'vars';
  2         2  
  2         71  
8 2     2   7 use warnings;
  2         2  
  2         46  
9 2     2   1333 use Log::Any::IfLOG '$log';
  2         19  
  2         7  
10              
11 2     2   706 use Data::Sah::FormatCommon;
  2         78  
  2         494  
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 29 my %args = @_;
27              
28 10         13 my $format = $args{format};
29 10         18 my $pkg = "Data::Sah::Format::perl\::$format";
30 10         41 (my $pkg_pm = "$pkg.pm") =~ s!::!/!g;
31              
32 10         1027 require $pkg_pm;
33              
34 10         53 my $fmt = &{"$pkg\::format"}(
35             data_term => '$data',
36 10         25 (args => $args{formatter_args}) x !!defined($args{formatter_args}),
37             );
38              
39 10         8 my $code;
40              
41 10         11 my $code_require .= '';
42             #my %mem;
43 10 50       20 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       20 if ($Log_Formatter_Code) {
60 0         0 $log->tracef("Formatter code (gen args: %s): %s", \%args, $code);
61             }
62              
63 10 50       14 return $code if $args{source};
64              
65 10         1396 my $formatter = eval $code;
66 10 50       22 die if $@;
67 10         49 $formatter;
68             }
69              
70             1;
71             # ABSTRACT: Formatter for Data::Sah
72              
73             __END__