File Coverage

blib/lib/YAML.pm
Criterion Covered Total %
statement 58 61 95.0
branch 14 20 70.0
condition 1 3 33.3
subroutine 14 14 100.0
pod 6 8 75.0
total 93 106 87.7


line stmt bran cond sub pod time code
1             package YAML;
2             our $VERSION = '1.31';
3              
4 48     48   13909397 use YAML::Mo;
  48         165  
  48         311  
5              
6 48     48   297 use Exporter;
  48         1816  
  48         13932  
7             push @YAML::ISA, 'Exporter';
8             our @EXPORT = qw{ Dump Load };
9             our @EXPORT_OK = qw{ freeze thaw DumpFile LoadFile Bless Blessed };
10             our (
11             $UseCode, $DumpCode, $LoadCode,
12             $SpecVersion,
13             $UseHeader, $UseVersion, $UseBlock, $UseFold, $UseAliases,
14             $Indent, $SortKeys, $Preserve,
15             $AnchorPrefix, $CompressSeries, $InlineSeries, $Purity,
16             $Stringify, $Numify, $LoadBlessed, $QuoteNumericStrings,
17             $DumperClass, $LoaderClass
18             );
19              
20 48     48   23045 use YAML::Node; # XXX This is a temp fix for Module::Build
  48         156  
  48         3878  
21 48     48   330 use Scalar::Util qw/ openhandle /;
  48         103  
  48         3442  
22              
23             # XXX This VALUE nonsense needs to go.
24 48     48   310 use constant VALUE => "\x07YAML\x07VALUE\x07";
  48         95  
  48         16141  
25              
26             # YAML Object Properties
27             has dumper_class => default => sub {'YAML::Dumper'};
28             has loader_class => default => sub {'YAML::Loader'};
29             has dumper_object => default => sub {$_[0]->init_action_object("dumper")};
30             has loader_object => default => sub {$_[0]->init_action_object("loader")};
31              
32             sub Dump {
33 158     158 1 1255927 my $yaml = YAML->new;
34 158 50       632 $yaml->dumper_class($YAML::DumperClass)
35             if $YAML::DumperClass;
36 158         634 return $yaml->dumper_object->dump(@_);
37             }
38              
39             sub Load {
40 321     321 1 2412546 my $yaml = YAML->new;
41 321 50       1216 $yaml->loader_class($YAML::LoaderClass)
42             if $YAML::LoaderClass;
43 321         1081 return $yaml->loader_object->load(@_);
44             }
45              
46             {
47 48     48   427 no warnings 'once';
  48         121  
  48         41831  
48             # freeze/thaw is the API for Storable string serialization. Some
49             # modules make use of serializing packages on if they use freeze/thaw.
50             *freeze = \ &Dump;
51             *thaw = \ &Load;
52             }
53              
54             sub DumpFile {
55 5     5 1 620065 my $OUT;
56 5         38 my $filename = shift;
57 5 100       118 if (openhandle $filename) {
58 2         7 $OUT = $filename;
59             }
60             else {
61 3         9 my $mode = '>';
62 3 50       19 if ($filename =~ /^\s*(>{1,2})\s*(.*)$/) {
63 0         0 ($mode, $filename) = ($1, $2);
64             }
65 3 100       759 open $OUT, $mode, $filename
66             or YAML::Mo::Object->die('YAML_DUMP_ERR_FILE_OUTPUT', $filename, "$!");
67             }
68 4         51 binmode $OUT, ':utf8'; # if $Config{useperlio} eq 'define';
69 4         99 local $/ = "\n"; # reset special to "sane"
70 4         34 print $OUT Dump(@_);
71 4 50       64 unless (ref $filename eq 'GLOB') {
72             close $OUT
73 4 50       309 or do {
74 0         0 my $errsav = $!;
75 0         0 YAML::Mo::Object->die('YAML_DUMP_ERR_FILE_OUTPUT_CLOSE', $filename, $errsav);
76             }
77             }
78             }
79              
80             sub LoadFile {
81 5     5 1 253826 my $IN;
82 5         126 my $filename = shift;
83 5 100       161 if (openhandle $filename) {
84 2         17 $IN = $filename;
85             }
86             else {
87 3 100       251 open $IN, '<', $filename
88             or YAML::Mo::Object->die('YAML_LOAD_ERR_FILE_INPUT', $filename, "$!");
89             }
90 4         84 binmode $IN, ':utf8'; # if $Config{useperlio} eq 'define';
91 4         29 return Load(do { local $/; <$IN> });
  4         61  
  4         38376  
92             }
93              
94             sub init_action_object {
95 479     479 0 831 my $self = shift;
96 479         918 my $object_class = (shift) . '_class';
97 479         1787 my $module_name = $self->$object_class;
98 479         39587 eval "require $module_name";
99 479 50 33     2889 $self->die("Error in require $module_name - $@")
100             if $@ and "$@" !~ /Can't locate/;
101 479         2122 my $object = $self->$object_class->new;
102 479         2338 $object->set_global_options;
103 479         3071 return $object;
104             }
105              
106             my $global = {};
107             sub Bless {
108 4     4 1 7177 require YAML::Dumper::Base;
109 4         16 YAML::Dumper::Base::bless($global, @_)
110             }
111             sub Blessed {
112 1     1 1 11 require YAML::Dumper::Base;
113 1         6 YAML::Dumper::Base::blessed($global, @_)
114             }
115 509     509 0 1636 sub global_object { $global }
116              
117             1;