File Coverage

blib/lib/YAML/PP/Loader.pm
Criterion Covered Total %
statement 58 59 98.3
branch 7 10 70.0
condition 8 9 88.8
subroutine 13 13 100.0
pod 0 8 0.0
total 86 99 86.8


line stmt bran cond sub pod time code
1             # ABSTRACT: Load YAML into data with Parser and Constructor
2 48     48   320419 use strict;
  48         60  
  48         1449  
3 48     48   158 use warnings;
  48         219  
  48         3029  
4             package YAML::PP::Loader;
5              
6             our $VERSION = 'v0.40.1'; # TRIAL VERSION
7              
8 48     48   21479 use YAML::PP::Parser;
  48         119  
  48         1558  
9 48     48   19608 use YAML::PP::Constructor;
  48         147  
  48         1379  
10 48     48   261 use YAML::PP::Reader;
  48         61  
  48         21684  
11              
12             sub new {
13 766     766 0 338474 my ($class, %args) = @_;
14              
15 766   100     1897 my $cyclic_refs = delete $args{cyclic_refs} || 'fatal';
16 766   100     1698 my $default_yaml_version = delete $args{default_yaml_version} || '1.2';
17 766         1201 my $preserve = delete $args{preserve};
18 766         987 my $duplicate_keys = delete $args{duplicate_keys};
19 766         1029 my $require_footer = delete $args{require_footer};
20 766         1041 my $max_depth = delete $args{max_depth};
21 766         894 my $schemas = delete $args{schemas};
22 766   100     1240 $schemas ||= {
23             '1.2' => YAML::PP->default_schema(
24             boolean => 'perl',
25             )
26             };
27              
28 766   66     3750 my $constructor = delete $args{constructor} || YAML::PP::Constructor->new(
29             schemas => $schemas,
30             cyclic_refs => $cyclic_refs,
31             default_yaml_version => $default_yaml_version,
32             preserve => $preserve,
33             duplicate_keys => $duplicate_keys,
34             require_footer => $require_footer,
35             max_depth => $max_depth,
36             );
37 765         1141 my $parser = delete $args{parser};
38 765 50       1300 unless ($parser) {
39 765         2625 $parser = YAML::PP::Parser->new(
40             default_yaml_version => $default_yaml_version,
41             );
42             }
43 765 50       2600 unless ($parser->receiver) {
44 765         1446 $parser->set_receiver($constructor);
45             }
46              
47 765 100       1773 if (keys %args) {
48 1         43 die "Unexpected arguments: " . join ', ', sort keys %args;
49             }
50 764         1763 my $self = bless {
51             parser => $parser,
52             constructor => $constructor,
53             }, $class;
54 764         1713 return $self;
55             }
56              
57             sub clone {
58 9     9 0 13 my ($self) = @_;
59 9         17 my $clone = {
60             parser => $self->parser->clone,
61             constructor => $self->constructor->clone,
62             };
63 9         20 bless $clone, ref $self;
64 9         24 $clone->parser->set_receiver($clone->constructor);
65 9         21 return $clone;
66             }
67              
68 4443     4443 0 11537 sub parser { return $_[0]->{parser} }
69 2233     2233 0 3195 sub constructor { return $_[0]->{constructor} }
70              
71             sub filename {
72 3     3 0 4 my ($self) = @_;
73 3         5 my $reader = $self->parser->reader;
74 3 50       19 if ($reader->isa('YAML::PP::Reader::File')) {
75 3         11 return $reader->input;
76             }
77 0         0 die "Reader is not a YAML::PP::Reader::File";
78             }
79              
80             sub load_string {
81 2183     2183 0 5840 my ($self, $yaml) = @_;
82 2183         4852 $self->parser->set_reader(YAML::PP::Reader->new( input => $yaml ));
83 2183         4962 $self->load();
84             }
85              
86             sub load_file {
87 28     28 0 68 my ($self, $file) = @_;
88 28         97 $self->parser->set_reader(YAML::PP::Reader::File->new( input => $file ));
89 28         103 $self->load();
90             }
91              
92             sub load {
93 2211     2211 0 3045 my ($self) = @_;
94 2211         3328 my $parser = $self->parser;
95 2211         3779 my $constructor = $self->constructor;
96              
97 2211         6392 $constructor->init;
98 2211         5786 $parser->parse();
99              
100 2176         3524 my $docs = $constructor->docs;
101 2176 100       18663 return wantarray ? @$docs : $docs->[0];
102             }
103              
104              
105             1;