File Coverage

inc/YAML/Dumper/Base.pm
Criterion Covered Total %
statement 33 58 56.9
branch 14 44 31.8
condition 1 6 16.6
subroutine 7 10 70.0
pod 0 4 0.0
total 55 122 45.0


line stmt bran cond sub pod time code
1             #line 1
2 1     1   5 package YAML::Dumper::Base;
  1     1   2  
  1         27  
  1         5  
  1         2  
  1         23  
3 1     1   4 use strict; use warnings;
  1     1   2  
  1         48  
  1         8  
  1         2  
  1         13  
4 1     1   6 use YAML::Base; use base 'YAML::Base';
  1         3  
  1         754  
5             use YAML::Node;
6              
7             # YAML Dumping options
8             field spec_version => '1.0';
9             field indent_width => 2;
10             field use_header => 1;
11             field use_version => 0;
12             field sort_keys => 1;
13             field anchor_prefix => '';
14             field dump_code => 0;
15             field use_block => 0;
16             field use_fold => 0;
17             field compress_series => 1;
18             field inline_series => 0;
19             field use_aliases => 1;
20             field purity => 0;
21             field stringify => 0;
22              
23             # Properties
24             field stream => '';
25             field document => 0;
26             field transferred => {};
27             field id_refcnt => {};
28             field id_anchor => {};
29             field anchor => 1;
30             field level => 0;
31             field offset => [];
32             field headless => 0;
33             field blessed_map => {};
34              
35             # Global Options are an idea taken from Data::Dumper. Really they are just
36             # sugar on top of real OO properties. They make the simple Dump/Load API
37             # easy to configure.
38 1     1 0 3 sub set_global_options {
39 1 50       6 my $self = shift;
40             $self->spec_version($YAML::SpecVersion)
41 1 50       6 if defined $YAML::SpecVersion;
42             $self->indent_width($YAML::Indent)
43 1 50       4 if defined $YAML::Indent;
44             $self->use_header($YAML::UseHeader)
45 1 50       5 if defined $YAML::UseHeader;
46             $self->use_version($YAML::UseVersion)
47 1 50       6 if defined $YAML::UseVersion;
48             $self->sort_keys($YAML::SortKeys)
49 1 50       7 if defined $YAML::SortKeys;
50             $self->anchor_prefix($YAML::AnchorPrefix)
51 1 50 0     25 if defined $YAML::AnchorPrefix;
      33        
52             $self->dump_code($YAML::DumpCode || $YAML::UseCode)
53 1 50       6 if defined $YAML::DumpCode or defined $YAML::UseCode;
54             $self->use_block($YAML::UseBlock)
55 1 50       5 if defined $YAML::UseBlock;
56             $self->use_fold($YAML::UseFold)
57 1 50       5 if defined $YAML::UseFold;
58             $self->compress_series($YAML::CompressSeries)
59 1 50       5 if defined $YAML::CompressSeries;
60             $self->inline_series($YAML::InlineSeries)
61 1 50       8 if defined $YAML::InlineSeries;
62             $self->use_aliases($YAML::UseAliases)
63 1 50       6 if defined $YAML::UseAliases;
64             $self->purity($YAML::Purity)
65 1 50       7 if defined $YAML::Purity;
66             $self->stringify($YAML::Stringify)
67             if defined $YAML::Stringify;
68             }
69              
70 0     0 0   sub dump {
71 0           my $self = shift;
72             $self->die('dump() not implemented in this class.');
73             }
74              
75 0     0 0   sub blessed {
76 0           my $self = shift;
77 0 0         my ($ref) = @_;
78 0           $ref = \$_[0] unless ref $ref;
79 0           my (undef, undef, $node_id) = YAML::Base->node_info($ref);
80             $self->{blessed_map}->{$node_id};
81             }
82            
83 0     0 0   sub bless {
84 0           my $self = shift;
85 0           my ($ref, $blessing) = @_;
86 0 0         my $ynode;
87 0           $ref = \$_[0] unless ref $ref;
88 0 0         my (undef, undef, $node_id) = YAML::Base->node_info($ref);
    0          
89 0           if (not defined $blessing) {
90             $ynode = YAML::Node->new($ref);
91             }
92 0 0         elsif (ref $blessing) {
93 0           $self->die() unless ynode($blessing);
94             $ynode = $blessing;
95             }
96 1     1   6 else {
  1         3  
  1         137  
97 0           no strict 'refs';
98 0 0         my $transfer = $blessing . "::yaml_dump";
  0            
99 0           $self->die() unless defined &{$transfer};
  0            
100 0 0         $ynode = &{$transfer}($ref);
101             $self->die() unless ynode($ynode);
102 0           }
103 0 0         $self->{blessed_map}->{$node_id} = $ynode;
104 0           my $object = ynode($ynode) or $self->die();
105             return $object;
106             }
107              
108             1;
109              
110             __END__