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

MergeSchemaProvider::read()   A

Complexity

Conditions 5
Paths 5

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 5

Importance

Changes 0
Metric Value
cc 5
eloc 9
nc 5
nop 1
dl 0
loc 16
ccs 10
cts 10
cp 1
crap 5
rs 9.6111
c 0
b 0
f 0
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