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   373398 use strict;
  48         84  
  48         1440  
3 48     48   164 use warnings;
  48         200  
  48         3055  
4             package YAML::PP::Loader;
5              
6             our $VERSION = 'v0.41.0'; # VERSION
7              
8 48     48   24168 use YAML::PP::Parser;
  48         141  
  48         1672  
9 48     48   19738 use YAML::PP::Constructor;
  48         120  
  48         1333  
10 48     48   257 use YAML::PP::Reader;
  48         68  
  48         22114  
11              
12             sub new {
13 766     766 0 366197 my ($class, %args) = @_;
14              
15 766   100     1953 my $cyclic_refs = delete $args{cyclic_refs} || 'fatal';
16 766   100     1714 my $default_yaml_version = delete $args{default_yaml_version} || '1.2';
17 766         1142 my $preserve = delete $args{preserve};
18 766         951 my $duplicate_keys = delete $args{duplicate_keys};
19 766         904 my $require_footer = delete $args{require_footer};
20 766         1021 my $max_depth = delete $args{max_depth};
21 766         965 my $schemas = delete $args{schemas};
22 766   100     1522 $schemas ||= {
23             '1.2' => YAML::PP->default_schema(
24             boolean => 'perl',
25             )
26             };
27              
28 766   66     3575 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         1159 my $parser = delete $args{parser};
38 765 50       1423 unless ($parser) {
39 765         2681 $parser = YAML::PP::Parser->new(
40             default_yaml_version => $default_yaml_version,
41             );
42             }
43 765 50       1500 unless ($parser->receiver) {
44 765         2605 $parser->set_receiver($constructor);
45             }
46              
47 765 100       1408 if (keys %args) {
48 1         71 die "Unexpected arguments: " . join ', ', sort keys %args;
49             }
50 764         1780 my $self = bless {
51             parser => $parser,
52             constructor => $constructor,
53             }, $class;
54 764         1799 return $self;
55             }
56              
57             sub clone {
58 9     9 0 13 my ($self) = @_;
59 9         12 my $clone = {
60             parser => $self->parser->clone,
61             constructor => $self->constructor->clone,
62             };
63 9         31 bless $clone, ref $self;
64 9         11 $clone->parser->set_receiver($clone->constructor);
65 9         20 return $clone;
66             }
67              
68 4443     4443 0 11116 sub parser { return $_[0]->{parser} }
69 2233     2233 0 3130 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       16 if ($reader->isa('YAML::PP::Reader::File')) {
75 3         13 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 7739 my ($self, $yaml) = @_;
82 2183         4430 $self->parser->set_reader(YAML::PP::Reader->new( input => $yaml ));
83 2183         5419 $self->load();
84             }
85              
86             sub load_file {
87 28     28 0 52 my ($self, $file) = @_;
88 28         131 $self->parser->set_reader(YAML::PP::Reader::File->new( input => $file ));
89 28         79 $self->load();
90             }
91              
92             sub load {
93 2211     2211 0 3157 my ($self) = @_;
94 2211         3499 my $parser = $self->parser;
95 2211         3930 my $constructor = $self->constructor;
96              
97 2211         6616 $constructor->init;
98 2211         5927 $parser->parse();
99              
100 2176         3535 my $docs = $constructor->docs;
101 2176 100       10283 return wantarray ? @$docs : $docs->[0];
102             }
103              
104              
105             1;