Passed
Push — master ( 3d645a...097498 )
by Tomáš
05:27
created

GraphQLExtension::setupRequestProcessor()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 7
cts 7
cp 1
rs 9.8666
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Portiny\GraphQL\Adapter\Nette\DI;
6
7
use Nette\DI\CompilerExtension;
8
use Portiny\GraphQL\Contract\Field\QueryFieldInterface;
9
use Portiny\GraphQL\Contract\Http\Request\RequestParserInterface;
10
use Portiny\GraphQL\Contract\Mutation\MutationFieldInterface;
11
use Portiny\GraphQL\Contract\Provider\MutationFieldsProviderInterface;
12
use Portiny\GraphQL\Contract\Provider\QueryFieldsProviderInterface;
13
use Portiny\GraphQL\GraphQL\RequestProcessor;
14
use Portiny\GraphQL\GraphQL\Schema\SchemaCacheProvider;
15
use Portiny\GraphQL\Http\Request\JsonRequestParser;
16
use Portiny\GraphQL\Provider\MutationFieldsProvider;
17
use Portiny\GraphQL\Provider\QueryFieldsProvider;
18
19
final class GraphQLExtension extends CompilerExtension
20
{
21
	/**
22
	 * @var array
23
	 */
24
	private static $defaults = [
25
		'schemaCache' => [
26
			'enabled' => false,
27
			'cacheDir' => '%tempDir%/cache/graphql',
28
		],
29
	];
30
31 1
	/**
32
	 * {@inheritdoc}
33 1
	 */
34 1
	public function loadConfiguration(): void
35 1
	{
36 1
		$config = $this->getConfig(self::$defaults);
37
		$containerBuilder = $this->getContainerBuilder();
38
39
		$containerBuilder->addDefinition($this->prefix('requestProcessor'))
40
			->setFactory(RequestProcessor::class)
41 1
			->addSetup('setSchemaCache', [$config['schemaCache']['enabled']]);
42
43 1
		$containerBuilder->addDefinition($this->prefix('schemaCacheProvider'))
44 1
			->setFactory(SchemaCacheProvider::class, [$config['schemaCache']['cacheDir']]);
45 1
	}
46 1
47
	/**
48 1
	 * {@inheritdoc}
49
	 */
50 1
	public function beforeCompile(): void
51
	{
52 1
		$this->setupMutationFieldProvider();
53 1
		$this->setupQueryFieldProvider();
54 1
		$this->setupRequestParser();
55
	}
56 1
57 1
	private function setupMutationFieldProvider(): void
58 1
	{
59
		$containerBuilder = $this->getContainerBuilder();
60 1
61
		$mutationFieldProvider = $containerBuilder->addDefinition($this->prefix('mutationFieldsProvider'))
62 1
			->setFactory(MutationFieldsProvider::class)
63
			->setType(MutationFieldsProviderInterface::class);
64 1
65
		$mutationFieldDefinitions = $containerBuilder->findByType(MutationFieldInterface::class);
66 1
		foreach ($mutationFieldDefinitions as $mutationFieldDefinition) {
67 1
			$mutationFieldProvider->addSetup('addField', ['@' . $mutationFieldDefinition->getType()]);
68 1
		}
69
	}
70 1
71 1
	private function setupQueryFieldProvider(): void
72 1
	{
73
		$containerBuilder = $this->getContainerBuilder();
74 1
75
		$queryFieldProvider = $containerBuilder->addDefinition($this->prefix('queryFieldsProvider'))
76 1
			->setFactory(QueryFieldsProvider::class)
77
			->setType(QueryFieldsProviderInterface::class);
78 1
79 1
		$queryFieldDefinitions = $containerBuilder->findByType(QueryFieldInterface::class);
80
		foreach ($queryFieldDefinitions as $queryFieldDefinition) {
81 1
			$queryFieldProvider->addSetup('addField', ['@' . $queryFieldDefinition->getType()]);
82 1
		}
83 1
	}
84
85
	private function setupRequestParser(): void
86 1
	{
87 1
		$containerBuilder = $this->getContainerBuilder();
88 1
89
		if (! $containerBuilder->findByType(RequestParserInterface::class)) {
90
			$containerBuilder->addDefinition($this->prefix('jsonRequestParser'))
91
				->setFactory(JsonRequestParser::class);
92
		}
93
	}
94
}
95