Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
95.24% covered (success)
95.24%
20 / 21
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
ComponentsBuilderFactory
95.24% covered (success)
95.24%
20 / 21
66.67% covered (warning)
66.67%
2 / 3
4
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
 createComponentsBuilderFactory
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
1 / 1
1
 createComponentsBuilder
66.67% covered (warning)
66.67%
2 / 3
0.00% covered (danger)
0.00%
0 / 1
2.15
1<?php
2namespace Apie\SchemaGenerator;
3
4use Apie\SchemaGenerator\Builders\ComponentsBuilder;
5use Apie\SchemaGenerator\Interfaces\SchemaProvider;
6use Apie\SchemaGenerator\SchemaProviders\AliasSchemaProvider;
7use Apie\SchemaGenerator\SchemaProviders\DateTimeSchemaProvider;
8use Apie\SchemaGenerator\SchemaProviders\DateTimeZoneSchemaProvider;
9use Apie\SchemaGenerator\SchemaProviders\DateValueObjectSchemaProvider;
10use Apie\SchemaGenerator\SchemaProviders\DurationSchemaProvider;
11use Apie\SchemaGenerator\SchemaProviders\ItemHashmapSchemaProvider;
12use Apie\SchemaGenerator\SchemaProviders\ItemListSchemaProvider;
13use Apie\SchemaGenerator\SchemaProviders\ItemSetSchemaProvider;
14use Apie\SchemaGenerator\SchemaProviders\MetadataSchemaProvider;
15use Apie\SchemaGenerator\SchemaProviders\PolymorphicEntitySchemaProvider;
16use Apie\SchemaGenerator\SchemaProviders\SchemaAttributeProvider;
17use Apie\SchemaGenerator\SchemaProviders\StringValueObjectSchemaProvider;
18use Apie\SchemaGenerator\SchemaProviders\UploadedFileSchemaProvider;
19use Apie\SchemaGenerator\SchemaProviders\UriSchemaProvider;
20use Apie\SchemaGenerator\SchemaProviders\ValueObjectSchemaProvider;
21use cebe\openapi\spec\Components;
22
23class ComponentsBuilderFactory
24{
25    /**
26     * @var array<int, SchemaProvider<object>>
27     */
28    private array $schemaProviders;
29
30    /**
31     * @param SchemaProvider<object> $schemaProviders
32     */
33    public function __construct(SchemaProvider... $schemaProviders)
34    {
35        $this->schemaProviders = $schemaProviders;
36    }
37
38    public static function createComponentsBuilderFactory(?int $maxEnumSize = 100): self
39    {
40        return new self(
41            new SchemaAttributeProvider(),
42            new AliasSchemaProvider(),
43            new UploadedFileSchemaProvider(),
44            new ItemListSchemaProvider(),
45            new ItemHashmapSchemaProvider(),
46            new ItemSetSchemaProvider(),
47            new PolymorphicEntitySchemaProvider(),
48            new DateTimeSchemaProvider(),
49            new DateTimeZoneSchemaProvider(),
50            new DateValueObjectSchemaProvider(),
51            new StringValueObjectSchemaProvider($maxEnumSize ?? 100),
52            new ValueObjectSchemaProvider(),
53            new DurationSchemaProvider(),
54            new UriSchemaProvider(),
55            new MetadataSchemaProvider(),
56        );
57    }
58
59    public function createComponentsBuilder(?Components $components = null): ComponentsBuilder
60    {
61        if ($components) {
62            return ComponentsBuilder::createWithExistingComponents($components, ...$this->schemaProviders);
63        }
64        return new ComponentsBuilder(...$this->schemaProviders);
65    }
66}