Completed
Push — master ( 65f525...acf933 )
by David
14s
created

AggregateQueryProvider   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 10
dl 0
loc 37
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getQueries() 0 7 2
A __construct() 0 3 1
A getMutations() 0 7 2
1
<?php
2
3
4
namespace TheCodingMachine\GraphQL\Controllers;
5
6
use function array_map;
7
use function array_merge;
8
9
/**
10
 * A query provider that aggregates several query providers together.
11
 */
12
class AggregateQueryProvider implements QueryProviderInterface
13
{
14
    /**
15
     * @var QueryProviderInterface[]
16
     */
17
    private $queryProviders;
18
19
    /**
20
     * @param QueryProviderInterface[] $queryProviders
21
     */
22
    public function __construct(array $queryProviders)
23
    {
24
        $this->queryProviders = $queryProviders;
25
    }
26
27
    /**
28
     * @return QueryField[]
29
     */
30
    public function getQueries(): array
31
    {
32
        $queriesArray = array_map(function(QueryProviderInterface $queryProvider) { return $queryProvider->getQueries(); }, $this->queryProviders);
33
        if ($queriesArray === []) {
34
            return [];
35
        }
36
        return array_merge(...$queriesArray);
37
    }
38
39
    /**
40
     * @return QueryField[]
41
     */
42
    public function getMutations(): array
43
    {
44
        $mutationsArray = array_map(function(QueryProviderInterface $queryProvider) { return $queryProvider->getMutations(); }, $this->queryProviders);
45
        if ($mutationsArray === []) {
46
            return [];
47
        }
48
        return array_merge(...$mutationsArray);
49
    }
50
}
51