File Coverage

blib/lib/YAML/PP/Schema/Core.pm
Criterion Covered Total %
statement 46 46 100.0
branch 4 4 100.0
condition n/a
subroutine 9 9 100.0
pod 1 1 100.0
total 60 60 100.0


line stmt bran cond sub pod time code
1 35     35   178515 use strict;
  35         57  
  35         1205  
2 35     35   193 use warnings;
  35         54  
  35         3052  
3             package YAML::PP::Schema::Core;
4              
5             our $VERSION = 'v0.40.1'; # TRIAL VERSION
6              
7 35         2869 use YAML::PP::Schema::JSON qw/
8             represent_int represent_float represent_literal represent_bool
9             represent_undef
10 35     35   518 /;
  35         47  
11              
12 35     35   181 use B;
  35         81  
  35         913  
13              
14 35     35   147 use YAML::PP::Common qw/ YAML_PLAIN_SCALAR_STYLE /;
  35         51  
  35         22626  
15              
16             my $RE_INT_CORE = qr{^([+-]?(?:[0-9]+))$};
17             my $RE_FLOAT_CORE = qr{^([+-]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)(?:[eE][+-]?[0-9]+)?)$};
18             my $RE_INT_OCTAL = qr{^0o([0-7]+)$};
19             my $RE_INT_HEX = qr{^0x([0-9a-fA-F]+)$};
20              
21 6     6   30 sub _from_oct { oct $_[2]->[0] }
22 10     10   46 sub _from_hex { hex $_[2]->[0] }
23              
24             sub register {
25 739     739 1 2528 my ($self, %args) = @_;
26 739         1238 my $schema = $args{schema};
27              
28             $schema->add_resolver(
29             tag => 'tag:yaml.org,2002:null',
30             match => [ equals => $_ => undef ],
31 739         3266 ) for (qw/ null NULL Null ~ /, '');
32             $schema->add_resolver(
33             tag => 'tag:yaml.org,2002:bool',
34             match => [ equals => $_ => $schema->true ],
35 739         2097 ) for (qw/ true TRUE True /);
36             $schema->add_resolver(
37             tag => 'tag:yaml.org,2002:bool',
38             match => [ equals => $_ => $schema->false ],
39 739         1850 ) for (qw/ false FALSE False /);
40 739         2392 $schema->add_resolver(
41             tag => 'tag:yaml.org,2002:int',
42             match => [ regex => $RE_INT_CORE => \&YAML::PP::Schema::JSON::_to_int ],
43             );
44 739         2200 $schema->add_resolver(
45             tag => 'tag:yaml.org,2002:int',
46             match => [ regex => $RE_INT_OCTAL => \&_from_oct ],
47             );
48 739         1910 $schema->add_resolver(
49             tag => 'tag:yaml.org,2002:int',
50             match => [ regex => $RE_INT_HEX => \&_from_hex ],
51             );
52 739         2496 $schema->add_resolver(
53             tag => 'tag:yaml.org,2002:float',
54             match => [ regex => $RE_FLOAT_CORE => \&YAML::PP::Schema::JSON::_to_float ],
55             );
56             $schema->add_resolver(
57             tag => 'tag:yaml.org,2002:float',
58             match => [ equals => $_ => 0 + "inf" ],
59 739         2138 ) for (qw/ .inf .Inf .INF +.inf +.Inf +.INF /);
60             $schema->add_resolver(
61             tag => 'tag:yaml.org,2002:float',
62             match => [ equals => $_ => 0 - "inf" ],
63 739         1740 ) for (qw/ -.inf -.Inf -.INF /);
64             $schema->add_resolver(
65             tag => 'tag:yaml.org,2002:float',
66             match => [ equals => $_ => 0 + "nan" ],
67 739         2043 ) for (qw/ .nan .NaN .NAN /);
68             $schema->add_resolver(
69             tag => 'tag:yaml.org,2002:str',
70 739     12906   3914 match => [ all => sub { $_[1]->{value} } ],
  12906         33158  
71             );
72              
73 739         1123 my $int_flags = B::SVp_IOK;
74 739         880 my $float_flags = B::SVp_NOK;
75 739         2268 $schema->add_representer(
76             flags => $int_flags,
77             code => \&represent_int,
78             );
79 739         1543 $schema->add_representer(
80             flags => $float_flags,
81             code => \&represent_float,
82             );
83 739         1703 $schema->add_representer(
84             undefined => \&represent_undef,
85             );
86             $schema->add_representer(
87             equals => $_,
88             code => \&represent_literal,
89 739         2058 ) for ("", qw/
90             true TRUE True false FALSE False null NULL Null ~
91             .inf .Inf .INF +.inf +.Inf +.INF -.inf -.Inf -.INF .nan .NaN .NAN
92             /);
93 739         9219 $schema->add_representer(
94             regex => qr{$RE_INT_CORE|$RE_FLOAT_CORE|$RE_INT_OCTAL|$RE_INT_HEX},
95             code => \&represent_literal,
96             );
97              
98 739 100       1423 if ($schema->bool_class) {
99 735         913 for my $class (@{ $schema->bool_class }) {
  735         1191  
100 735 100       1405 if ($class eq 'perl') {
101 145         336 $schema->add_representer(
102             bool => 1,
103             code => \&represent_bool,
104             );
105 145         265 next;
106             }
107             $schema->add_representer(
108 590         1133 class_equals => $class,
109             code => \&represent_bool,
110             );
111             }
112             }
113              
114 739         2871 return;
115             }
116              
117             1;
118              
119             __END__