Passed
Push — 1.x ( e0237e...7df6ac )
by Aleksei
59s queued 23s
created

MergeSchemaProvider   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 20
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 11
dl 0
loc 20
ccs 10
cts 10
cp 1
rs 10
c 0
b 0
f 0
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A read() 0 16 5
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cycle\Schema\Provider;
6
7
use Cycle\Schema\Provider\Exception\SchemaProviderException;
8
use Cycle\Schema\Provider\Support\BaseProviderCollector;
9
use Cycle\Schema\Provider\Support\SchemaMerger;
10
11
/**
12
 * A class for working with a group of schema providers.
13
 * Parts of the schema are read from all providers and merged into one.
14
 */
15
final class MergeSchemaProvider extends BaseProviderCollector
16
{
17
    protected const IS_SEQUENCE_PIPELINE = false;
18
19 16
    public function read(?SchemaProviderInterface $nextProvider = null): ?array
20
    {
21 16
        if ($this->providers === null) {
22 1
            throw new SchemaProviderException(self::class . ' is not configured.');
23
        }
24 15
        $parts = [];
25 15
        foreach ($this->providers as $provider) {
26 12
            $parts[] = $provider->read();
27
        }
28
29 13
        $schema = (new SchemaMerger())->merge(...$parts);
30
31 12
        if ($schema !== null || $nextProvider === null) {
32 10
            return $schema;
33
        }
34 3
        return $nextProvider->read();
35
    }
36
}
37