Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
92.31% covered (success)
92.31%
12 / 13
85.71% covered (warning)
85.71%
6 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
CompositeMetadata
92.31% covered (success)
92.31%
12 / 13
85.71% covered (warning)
85.71%
6 / 7
11.06
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getDisplayName
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 toClass
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 toScalarType
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getHashmap
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getRequiredFields
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
5
 getArrayItemType
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2namespace Apie\Core\Metadata;
3
4use Apie\Core\Context\MetadataFieldHashmap;
5use Apie\Core\Enums\ScalarType;
6use Apie\Core\Lists\StringList;
7use Apie\Core\Metadata\Concerns\NoValueOptions;
8use Apie\Core\ValueObjects\Interfaces\ValueObjectInterface;
9use ReflectionClass;
10
11/**
12 * Composite value objects
13 * - Implements ValueObjectInterface
14 * - has CompositeValueObject trait
15 * - is always mapped as an object
16 */
17final class CompositeMetadata implements MetadataInterface
18{
19    use NoValueOptions;
20
21    private ?StringList $requiredFields = null;
22
23    /**
24     * @param ReflectionClass<ValueObjectInterface> $class
25     */
26    public function __construct(private readonly MetadataFieldHashmap $hashmap, private ?ReflectionClass $class = null)
27    {
28    }
29
30    public function getDisplayName(): string
31    {
32        return $this->class?->getShortName() ?? 'stdClass';
33    }
34
35    /**
36     * @return ReflectionClass<ValueObjectInterface>
37     */
38    public function toClass(): ?ReflectionClass
39    {
40        return $this->class;
41    }
42
43    public function toScalarType(): ScalarType
44    {
45        return ScalarType::STDCLASS;
46    }
47
48    public function getHashmap(): MetadataFieldHashmap
49    {
50        return $this->hashmap;
51    }
52
53    public function getRequiredFields(): StringList
54    {
55        if (null === $this->requiredFields) {
56            $required = [];
57            foreach ($this->hashmap as $name => $field) {
58                if ($field->isField() && $field->isRequired()) {
59                    $required[] = $name;
60                }
61            }
62            $this->requiredFields = new StringList($required);
63        }
64        return $this->requiredFields;
65    }
66
67    public function getArrayItemType(): ?MetadataInterface
68    {
69        return null;
70    }
71}