Lines 0.00% 0 / 8
Functions and Methods 0.00% 0 / 2
Classes and Traits 0.00% 0 / 1
Name Lines Functions and Methods CRAP Classes and Traits
GenerationOptionsFactory 0.00% 0 / 8 0.00% 0 / 2 12 0.00% 0 / 1
 createFromCodegenConfig 0.00% 0 / 4 0.00% 0 / 1 2
 buildAttributeFilters 0.00% 0 / 4 0.00% 0 / 1 6
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Codegen\Console;
6
7use Stewart\Codegen\Attribute\AttributeFilter;
8use Stewart\Codegen\Attribute\Collection\AttributeFilterCollection;
9use Stewart\Codegen\Attribute\KeyPatterns;
10use Stewart\Codegen\Entity\EntityInclusionRules;
11use Stewart\Codegen\GenerationOptions;
12use Stewart\Runtime\Config\CodegenConfig;
13
14final readonly class GenerationOptionsFactory
15{
16    public function createFromCodegenConfig(CodegenConfig $codegen): GenerationOptions
17    {
18        return new GenerationOptions(
19            EntityInclusionRules::fromPatterns($codegen->include, $codegen->exclude),
20            $this->buildAttributeFilters($codegen),
21        );
22    }
23
24    private function buildAttributeFilters(CodegenConfig $codegen): AttributeFilterCollection
25    {
26        $filters = [];
27
28        foreach ($codegen->attributes as $domain) {
29            $filters[] = new AttributeFilter($domain->domain, new KeyPatterns($domain->include), new KeyPatterns($domain->exclude));
30        }
31
32        return AttributeFilterCollection::keyedByDomain($filters);
33    }
34}