File Coverage

blib/lib/Whelk/Schema/Definition/Array.pm
Criterion Covered Total %
statement 35 35 100.0
branch 23 24 95.8
condition 2 3 66.6
subroutine 5 5 100.0
pod 3 3 100.0
total 68 70 97.1


line stmt bran cond sub pod time code
1             package Whelk::Schema::Definition::Array;
2             $Whelk::Schema::Definition::Array::VERSION = '1.04';
3 17     17   12745 use Whelk::StrictBase 'Whelk::Schema::Definition';
  17         43  
  17         136  
4              
5             attr '?items' => undef;
6             attr '?lax' => !!0;
7              
8             sub openapi_dump
9             {
10 5     5 1 14 my ($self, $openapi_obj, %hints) = @_;
11              
12 5         24 my $res = $self->SUPER::openapi_dump($openapi_obj, %hints);
13 5         15 $res->{type} = 'array';
14              
15 5 100       15 if ($self->items) {
16 3         29 $res->{items} = $self->items->openapi_schema($openapi_obj);
17             }
18              
19 5         46 return $res;
20             }
21              
22             sub _resolve
23             {
24 35     35   90 my ($self) = @_;
25              
26 35 100       101 $self->items($self->_build($self->items))
27             if $self->items;
28             }
29              
30             sub inhale
31             {
32 35     35 1 217 my ($self, $value) = @_;
33              
34 35 100       249 return undef if $self->_valid_nullable($value);
35              
36 34 100       165 if (ref $value eq 'ARRAY') {
    100          
37 23         122 my $type = $self->items;
38 23 100       196 if ($type) {
39 18         75 foreach my $index (keys @$value) {
40 28         138 my $inhaled = $type->inhale($value->[$index]);
41 28 100       126 return "array[$index]->$inhaled" if defined $inhaled;
42             }
43             }
44              
45 18         94 return $self->_inhale_extra_rules($value);
46             }
47             elsif ($self->lax) {
48 7         65 my $type = $self->items;
49 7 50       49 if ($type) {
50 7         49 my $inhaled = $type->inhale($value);
51 7 100       60 return "array[0]->$inhaled" if defined $inhaled;
52             }
53              
54 3         16 return $self->_inhale_extra_rules($value);
55             }
56              
57 4         59 return 'array';
58             }
59              
60             sub exhale
61             {
62 16     16 1 60 my ($self, $value) = @_;
63              
64 16 100       58 return undef if $self->_valid_nullable($value);
65              
66 15 100 66     76 if (ref $value ne 'ARRAY' && $self->lax) {
67 2         18 $value = [$value];
68             }
69              
70 15         48 my $type = $self->items;
71 15 100       209 return $value unless $type;
72              
73 6         19 @$value = map { $type->exhale($_) } @$value;
  11         34  
74 6         33 return $value;
75             }
76              
77             1;
78