File Coverage

blib/lib/Whelk/Schema/Definition/_Scalar.pm
Criterion Covered Total %
statement 28 31 90.3
branch 14 14 100.0
condition 8 9 88.8
subroutine 7 10 70.0
pod 4 4 100.0
total 61 68 89.7


line stmt bran cond sub pod time code
1             package Whelk::Schema::Definition::_Scalar;
2             $Whelk::Schema::Definition::_Scalar::VERSION = '1.04';
3 24     24   15157 use Whelk::StrictBase 'Whelk::Schema::Definition';
  24         105  
  24         238  
4 24     24   211 use Data::Dumper;
  24         66  
  24         20920  
5              
6             attr '?required' => sub { !$_[0]->has_default };
7             attr '?default' => sub { Whelk::Schema::NO_DEFAULT };
8             attr '?example' => undef;
9              
10             sub has_default
11             {
12 200     200 1 804 my $default = $_[0]->default;
13 200   66     1980 return !ref $default || $default != Whelk::Schema::NO_DEFAULT;
14             }
15              
16             sub openapi_dump
17             {
18 48     48 1 102 my ($self, $openapi_obj, %hints) = @_;
19              
20 48         102 local $Data::Dumper::Sortkeys = 1;
21              
22             # incomplete, must be complimented in child classes
23 48         168 my $res = $self->SUPER::openapi_dump($openapi_obj, %hints);
24              
25 48 100       153 if ($self->has_default) {
26             $res->{default} = $self->inhale_exhale(
27             undef,
28             sub {
29 0     0   0 die "incorrect default value: " . Dumper({schema => $self, hint => $_[0]});
30             }
31 15         94 );
32             }
33              
34 48 100       265 if (defined $self->example) {
35             $res->{example} = $self->inhale_exhale(
36             $self->example,
37             sub {
38 0     0   0 die "incorrect example: " . Dumper({schema => $self, hint => $_[0]});
39             }
40 2         14 );
41             }
42              
43 48         435 return $res;
44             }
45              
46             sub _inhale
47             {
48 251 100   251   663 return 'defined' unless defined pop();
49 243         527 return undef;
50             }
51              
52             sub inhale
53             {
54 253     253 1 689 my ($self, $value) = @_;
55 253 100 100     973 if (!defined $value && $self->has_default) {
56 15         34 $value = $self->default;
57             }
58              
59 253 100       923 return undef if $self->_valid_nullable($value);
60              
61 251         993 return $self->_inhale($value);
62             }
63              
64             sub _exhale
65             {
66 0     0   0 return pop();
67             }
68              
69             sub exhale
70             {
71 169     169 1 3866 my ($self, $value) = @_;
72 169 100 100     713 if (!defined $value && $self->has_default) {
73 34         86 $value = $self->default;
74             }
75              
76 169 100       765 return undef if $self->_valid_nullable($value);
77              
78 167         618 return $self->_exhale($value);
79             }
80              
81             1;
82