Total Complexity | 10 |
Total Lines | 41 |
Duplicated Lines | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
1 | <?php |
||
10 | final class AttributeLoggableContextCollectionFactory implements LoggableContextCollectionFactoryInterface |
||
11 | { |
||
12 | /** |
||
13 | * @param string[] $loggablePaths |
||
14 | */ |
||
15 | public function __construct(private readonly LoggableContextCollectionFactoryInterface $decorated, private readonly array $loggablePaths) |
||
16 | { |
||
17 | } |
||
18 | |||
19 | public function create(): LoggableContextCollection |
||
20 | { |
||
21 | if (count($this->loggablePaths) === 0) { |
||
22 | return new LoggableContextCollection([]); |
||
23 | } |
||
24 | |||
25 | $classes = []; |
||
26 | |||
27 | if ($this->decorated) { |
||
28 | foreach ($this->decorated->create() as $loggableClass => $config) { |
||
29 | $classes[$loggableClass] = $config; |
||
30 | } |
||
31 | } |
||
32 | |||
33 | foreach (RecursiveClassIterator::getReflectionClasses($this->loggablePaths) as $className => $reflectionClass) { |
||
34 | if ($loggable = $this->getLoggableAttribute($reflectionClass)) { |
||
35 | $classes[$className] = ['groups' => $loggable->getGroups()]; |
||
36 | } |
||
37 | } |
||
38 | |||
39 | return new LoggableContextCollection($classes); |
||
40 | } |
||
41 | |||
42 | private function getLoggableAttribute(\ReflectionClass $reflectionClass): ?Loggable |
||
51 | } |
||
52 | } |
||
53 |