Completed
Push — master ( 895aee...c5d013 )
by Arthur
8s
created

MappingNormalizer   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 6

Importance

Changes 4
Bugs 1 Features 1
Metric Value
wmc 12
c 4
b 1
f 1
lcom 0
cbo 6
dl 0
loc 71
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
B fixNames() 0 16 5
B normalize() 0 22 5
A mergeResolveConfig() 0 14 2
1
<?php
2
3
namespace Arthem\GraphQLMapper\Mapping;
4
5
use Arthem\GraphQLMapper\Utils\TypeParser;
6
7
class MappingNormalizer
8
{
9
    /**
10
     * Validates mapping and fixes missing definitions
11
     *
12
     * @param SchemaContainer $schemaContainer
13
     */
14
    public function normalize(SchemaContainer $schemaContainer)
15
    {
16
        $this->fixNames($schemaContainer);
17
18
        $fields = [];
19
20
        foreach ($schemaContainer->getTypes() as $type) {
21
            $fields = array_merge($fields, $type->getFields());
22
        }
23
24
        if (null !== $querySchema = $schemaContainer->getQuerySchema()) {
25
            $fields = array_merge($fields, $querySchema->getFields());
26
        }
27
28
        if (null !== $mutationSchema = $schemaContainer->getMutationSchema()) {
29
            $fields = array_merge($fields, $mutationSchema->getFields());
30
        }
31
32
        foreach ($fields as $field) {
33
            $this->mergeResolveConfig($schemaContainer, $field);
34
        }
35
    }
36
37
    /**
38
     * @param SchemaContainer $schemaContainer
39
     */
40
    private function fixNames(SchemaContainer $schemaContainer)
41
    {
42
        if (null !== $query = $schemaContainer->getQuerySchema()) {
43
            $query->setName('Query');
44
            if (null === $query->getDescription()) {
45
                $query->setDescription('The query root of this schema');
46
            }
47
        }
48
49
        if (null !== $mutation = $schemaContainer->getMutationSchema()) {
50
            $mutation->setName('Mutation');
51
            if (null === $mutation->getDescription()) {
52
                $mutation->setDescription('The mutation root of this schema');
53
            }
54
        }
55
    }
56
57
    /**
58
     * Apply the resolve config of types that are used by query fields
59
     *
60
     * @param SchemaContainer $schemaContainer
61
     * @param Field           $field
62
     */
63
    private function mergeResolveConfig(SchemaContainer $schemaContainer, Field $field)
64
    {
65
        $typeName = TypeParser::getFinalType($field->getType());
66
67
        if (!$schemaContainer->hasType($typeName)) {
68
            return;
69
        }
70
71
        $typeConfig = $schemaContainer
72
            ->getType($typeName)
73
            ->getResolveConfig();
74
75
        $field->mergeResolveConfig($typeConfig);
76
    }
77
}
78