Skip to content

Commit aa8ea89

Browse files
authored
Merge pull request #502 from mcg-web/services_refactor
Refactor services definitions
2 parents b4040d1 + 0d9abf7 commit aa8ea89

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+394
-635
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ composer.lock
77
composer.phar
88
.php_cs.cache
99
.php_cs
10+
.phpunit.result.cache
1011

1112
phpbench.phar
1213
phpbench.phar.pubkey

.travis.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ jobs:
3434
- php: 7.1
3535
env: SYMFONY_VERSION=3.4.*
3636
- php: 7.2
37-
env: SYMFONY_VERSION=4.0.*
37+
env: SYMFONY_VERSION=4.0.* PHPUNIT_VERSION=^7.2
3838
- php: 7.2
39-
env: SYMFONY_VERSION=4.1.*
39+
env: SYMFONY_VERSION=4.1.* PHPUNIT_VERSION=^7.2
4040
- php: 7.3
4141
env: SYMFONY_VERSION=4.2.*
4242
- php: 7.3

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
},
5151
"require-dev": {
5252
"doctrine/orm": "^2.5",
53-
"phpunit/phpunit": "^5.7.26 || ^6.0 || ^7.2",
53+
"phpunit/phpunit": "^7.2 || ^8.2",
5454
"react/promise": "^2.5",
5555
"symfony/asset": "^3.4 || ^4.0",
5656
"symfony/browser-kit": "^3.4 || ^4.0",

lib/generator/tests/Generator/TypeGeneratorModeTest.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@
1313

1414
use Overblog\GraphQLGenerator\Generator\TypeGenerator;
1515
use Overblog\GraphQLGenerator\Tests\TestCase;
16+
use PHPUnit\Framework\MockObject\MockObject;
1617

1718
class TypeGeneratorModeTest extends TestCase
1819
{
1920
/** @var string */
2021
private $dir;
2122

22-
/** @var TypeGenerator|\PHPUnit_Framework_MockObject_MockObject */
23+
/** @var TypeGenerator|MockObject */
2324
private $typeGenerator;
2425

2526
private const CONFIG = [

lib/generator/tests/Generator/TypeGeneratorTest.php

+16-25
Original file line numberDiff line numberDiff line change
@@ -18,43 +18,35 @@
1818
use GraphQL\Type\Definition\ObjectType;
1919
use GraphQL\Type\Definition\StringType;
2020
use GraphQL\Type\Definition\Type;
21+
use Overblog\GraphQLGenerator\Generator\TypeGenerator;
2122

2223
class TypeGeneratorTest extends AbstractTypeGeneratorTest
2324
{
24-
/**
25-
* @expectedException \InvalidArgumentException
26-
* @expectedExceptionMessage Skeleton dir "fake" not found.
27-
*/
2825
public function testWrongSetSkeletonDirs(): void
2926
{
27+
$this->expectException(\InvalidArgumentException::class);
28+
$this->expectExceptionMessage('Skeleton dir "fake" not found.');
3029
$this->typeGenerator->setSkeletonDirs(['fake']);
3130
}
3231

33-
/**
34-
* @expectedException \InvalidArgumentException
35-
* @expectedExceptionMessage Skeleton dir must be string or object implementing __toString, "array" given.
36-
*/
3732
public function testWrongAddSkeletonDir(): void
3833
{
34+
$this->expectException(\InvalidArgumentException::class);
35+
$this->expectExceptionMessage('Skeleton dir must be string or object implementing __toString, "array" given.');
3936
$this->typeGenerator->addSkeletonDir([]);
4037
}
4138

42-
/**
43-
* @expectedException \InvalidArgumentException
44-
* @expectedExceptionMessage Skeleton dirs must be array or object implementing \Traversable interface, "object" given.
45-
*/
4639
public function testWrongObjectSetSkeletonDir(): void
4740
{
41+
$this->expectException(\InvalidArgumentException::class);
42+
$this->expectExceptionMessage('Skeleton dirs must be array or object implementing \Traversable interface, "object" given.');
4843
$this->typeGenerator->setSkeletonDirs(new \stdClass());
4944
}
5045

51-
52-
/**
53-
* @expectedException \InvalidArgumentException
54-
* @expectedExceptionMessageRegExp /Skeleton "fake" could not be found in .*\/skeleton./
55-
*/
5646
public function testWrongGetSkeletonDirs(): void
5747
{
48+
$this->expectException(\InvalidArgumentException::class);
49+
$this->expectExceptionMessageRegExp('/Skeleton "fake" could not be found in .*\/skeleton./');
5850
$this->typeGenerator->getSkeletonContent('fake');
5951
}
6052

@@ -88,12 +80,10 @@ public function testTypeAlias2String(): void
8880
);
8981
}
9082

91-
/**
92-
* @expectedException \RuntimeException
93-
* @expectedExceptionMessage Malformed ListOf wrapper type "[String" expected "]" but got "g".
94-
*/
9583
public function testTypeAlias2StringInvalidListOf(): void
9684
{
85+
$this->expectException(\RuntimeException::class);
86+
$this->expectExceptionMessage('Malformed ListOf wrapper type "[String" expected "]" but got "g".');
9787
$this->generateClasses([
9888
'T' => [
9989
'type' => 'object',
@@ -158,12 +148,13 @@ public function testCallbackEntryDoesNotTreatObject(): void
158148
$this->assertEquals(['result' => 1], $resolveFn());
159149
}
160150

161-
/**
162-
* @expectedException \RuntimeException
163-
* @expectedExceptionMessage Generator [Overblog\GraphQLGenerator\Generator\TypeGenerator::generateFake] for placeholder "fake" is not callable.
164-
*/
165151
public function testProcessInvalidPlaceHoldersReplacements(): void
166152
{
153+
$this->expectException(\RuntimeException::class);
154+
$this->expectExceptionMessage(\sprintf(
155+
'Generator [%s::generateFake] for placeholder "fake" is not callable.',
156+
TypeGenerator::class
157+
));
167158
$this->typeGenerator->setSkeletonDirs(__DIR__.'/../Resources/Skeleton');
168159

169160
$this->generateClasses($this->getConfigs());

src/DependencyInjection/Compiler/ConfigTypesPass.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Overblog\GraphQLBundle\DependencyInjection\Compiler;
66

77
use GraphQL\Type\Definition\Type;
8+
use Overblog\GraphQLBundle\Definition\Builder\TypeFactory;
89
use Overblog\GraphQLBundle\Generator\TypeGenerator;
910
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1011
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -27,7 +28,7 @@ public function process(ContainerBuilder $container): void
2728
private function setTypeServiceDefinition(ContainerBuilder $container, $class, $alias): void
2829
{
2930
$definition = $container->setDefinition($class, new Definition(Type::class));
30-
$definition->setFactory([new Reference('overblog_graphql.type_factory'), 'create']);
31+
$definition->setFactory([new Reference(TypeFactory::class), 'create']);
3132
$definition->setPublic(false);
3233
$definition->setArguments([$class]);
3334
$definition->addTag(TypeTaggedServiceMappingPass::TAG_NAME, ['alias' => $alias, 'generated' => true]);

src/DependencyInjection/Configuration.php

+6-3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44

55
namespace Overblog\GraphQLBundle\DependencyInjection;
66

7+
use GraphQL\Executor\Promise\Adapter\SyncPromiseAdapter;
78
use GraphQL\Validator\Rules\QueryComplexity;
89
use GraphQL\Validator\Rules\QueryDepth;
910
use Overblog\GraphQLBundle\Definition\Argument;
1011
use Overblog\GraphQLBundle\Error\ErrorHandler;
1112
use Overblog\GraphQLBundle\EventListener\ErrorLoggerListener;
13+
use Overblog\GraphQLBundle\Executor\Executor;
14+
use Overblog\GraphQLBundle\ExpressionLanguage\ExpressionLanguage;
1215
use Overblog\GraphQLBundle\Resolver\Resolver;
1316
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
1417
use Symfony\Component\Config\Definition\Builder\EnumNodeDefinition;
@@ -148,13 +151,13 @@ private function servicesSection()
148151
->addDefaultsIfNotSet()
149152
->children()
150153
->scalarNode('executor')
151-
->defaultValue(self::NAME.'.executor.default')
154+
->defaultValue(Executor::class)
152155
->end()
153156
->scalarNode('promise_adapter')
154-
->defaultValue(self::NAME.'.promise_adapter.default')
157+
->defaultValue(SyncPromiseAdapter::class)
155158
->end()
156159
->scalarNode('expression_language')
157-
->defaultValue(self::NAME.'.expression_language.default')
160+
->defaultValue(ExpressionLanguage::class)
158161
->end()
159162
->scalarNode('cache_expression_language_parser')->end()
160163
->end()

src/DependencyInjection/OverblogGraphQLExtension.php

+13-8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use GraphQL\Type\Schema;
99
use Overblog\GraphQLBundle\CacheWarmer\CompileCacheWarmer;
1010
use Overblog\GraphQLBundle\Config\Processor\BuilderProcessor;
11+
use Overblog\GraphQLBundle\Definition\Builder\SchemaBuilder;
1112
use Overblog\GraphQLBundle\Error\ErrorHandler;
1213
use Overblog\GraphQLBundle\Error\UserWarning;
1314
use Overblog\GraphQLBundle\Event\Events;
@@ -16,6 +17,7 @@
1617
use Overblog\GraphQLBundle\EventListener\ErrorHandlerListener;
1718
use Overblog\GraphQLBundle\EventListener\ErrorLoggerListener;
1819
use Overblog\GraphQLBundle\EventListener\TypeDecoratorListener;
20+
use Overblog\GraphQLBundle\Request\Executor;
1921
use Symfony\Component\Config\FileLocator;
2022
use Symfony\Component\DependencyInjection\ContainerBuilder;
2123
use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -74,11 +76,14 @@ public function getConfiguration(array $config, ContainerBuilder $container)
7476
private function loadConfigFiles(ContainerBuilder $container): void
7577
{
7678
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
77-
$loader->load('services.yml');
78-
$loader->load('graphql_types.yml');
79-
$loader->load('graphql_resolvers.yml');
80-
$loader->load('expression_language_functions.yml');
81-
$loader->load('definition_config_processors.yml');
79+
$loader->load('services.yaml');
80+
$loader->load('commands.yaml');
81+
$loader->load('listeners.yaml');
82+
$loader->load('graphql_types.yaml');
83+
$loader->load('graphql_resolvers.yaml');
84+
$loader->load('expression_language_functions.yaml');
85+
$loader->load('definition_config_processors.yaml');
86+
$loader->load('aliases.yaml');
8287
}
8388

8489
private function setCompilerCacheWarmer(array $config, ContainerBuilder $container): void
@@ -161,7 +166,7 @@ private function treatConfigs(array $configs, ContainerBuilder $container, $forc
161166

162167
private function setSecurity(array $config, ContainerBuilder $container): void
163168
{
164-
$executorDefinition = $container->getDefinition($this->getAlias().'.request_executor');
169+
$executorDefinition = $container->getDefinition(Executor::class);
165170
if ($config['security']['enable_introspection']) {
166171
$executorDefinition->addMethodCall('enableIntrospectionQuery');
167172
} else {
@@ -206,14 +211,14 @@ private function setErrorHandler(array $config, ContainerBuilder $container): vo
206211

207212
private function setSchemaBuilderArguments(array $config, ContainerBuilder $container): void
208213
{
209-
$container->getDefinition($this->getAlias().'.schema_builder')
214+
$container->getDefinition(SchemaBuilder::class)
210215
->replaceArgument(1, $config['definitions']['config_validation']);
211216
}
212217

213218
private function setSchemaArguments(array $config, ContainerBuilder $container): void
214219
{
215220
if (isset($config['definitions']['schema'])) {
216-
$executorDefinition = $container->getDefinition($this->getAlias().'.request_executor');
221+
$executorDefinition = $container->getDefinition(Executor::class);
217222
$typeDecoratorListenerDefinition = $container->getDefinition(TypeDecoratorListener::class);
218223

219224
foreach ($config['definitions']['schema'] as $schemaName => $schemaConfig) {

src/Resources/config/aliases.yaml

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
services:
2+
_defaults:
3+
public: true
4+
5+
overblog_graphql.type_resolver: '@Overblog\GraphQLBundle\Resolver\TypeResolver'
6+
overblog_graphql.resolver_resolver: '@Overblog\GraphQLBundle\Resolver\ResolverResolver'
7+
overblog_graphql.mutation_resolver: '@Overblog\GraphQLBundle\Resolver\MutationResolver'
8+
overblog_graphql.access_resolver: '@Overblog\GraphQLBundle\Resolver\AccessResolver'
9+
overblog_graphql.cache_compiler: '@Overblog\GraphQLBundle\Generator\TypeGenerator'
10+
overblog_graphql.react.promise_adapter: '@Overblog\GraphQLBundle\Executor\Promise\Adapter\ReactPromiseAdapter'
11+
overblog_graphql.request_executor: '@Overblog\GraphQLBundle\Request\Executor'
12+
overblog_graphql.request_parser: '@Overblog\GraphQLBundle\Request\Parser'
13+
overblog_graphql.request_batch_parser: '@Overblog\GraphQLBundle\Request\BatchParser'
14+
15+
overblog_graphql.schema_builder:
16+
alias: 'Overblog\GraphQLBundle\Definition\Builder\SchemaBuilder'
17+
public: false
18+
19+
overblog_graphql.type_factory:
20+
alias: 'Overblog\GraphQLBundle\Definition\Builder\TypeFactory'
21+
public: false

src/Resources/config/commands.yaml

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
services:
2+
_defaults:
3+
public: true
4+
5+
Overblog\GraphQLBundle\Command\GraphQLDumpSchemaCommand:
6+
arguments:
7+
- "%kernel.root_dir%"
8+
- '@Overblog\GraphQLBundle\Request\Executor'
9+
tags:
10+
- { name: console.command, command: graphql:dump-schema, alias: "graph:dump-schema" }
11+
12+
Overblog\GraphQLBundle\Command\DebugCommand:
13+
arguments:
14+
- '@Overblog\GraphQLBundle\Resolver\TypeResolver'
15+
- '@Overblog\GraphQLBundle\Resolver\MutationResolver'
16+
- '@Overblog\GraphQLBundle\Resolver\ResolverResolver'
17+
tags:
18+
- { name: console.command, command: graphql:debug, alias: "debug:graphql" }
19+
20+
Overblog\GraphQLBundle\Command\CompileCommand:
21+
arguments:
22+
- '@Overblog\GraphQLBundle\Generator\TypeGenerator'
23+
tags:
24+
- { name: console.command, command: graphql:compile }
25+
26+
Overblog\GraphQLBundle\Command\ValidateCommand:
27+
arguments:
28+
- '@Overblog\GraphQLBundle\Request\Executor'
29+
tags:
30+
- { name: console.command, command: graphql:validate }
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,17 @@
11
services:
22
Overblog\GraphQLBundle\Definition\ConfigProcessor\PublicFieldsFilterConfigProcessor:
3-
class: Overblog\GraphQLBundle\Definition\ConfigProcessor\PublicFieldsFilterConfigProcessor
4-
public: false
53
tags:
64
- { name: overblog_graphql.definition_config_processor, priority: 2048 }
75

86
Overblog\GraphQLBundle\Definition\ConfigProcessor\AclConfigProcessor:
9-
class: Overblog\GraphQLBundle\Definition\ConfigProcessor\AclConfigProcessor
107
arguments:
11-
- '@overblog_graphql.access_resolver'
8+
- '@Overblog\GraphQLBundle\Resolver\AccessResolver'
129
- "%overblog_graphql.default_resolver%"
13-
public: false
1410
tags:
1511
- { name: overblog_graphql.definition_config_processor, priority: 512 }
1612

1713
Overblog\GraphQLBundle\Definition\ConfigProcessor\WrapArgumentConfigProcessor:
18-
class: Overblog\GraphQLBundle\Definition\ConfigProcessor\WrapArgumentConfigProcessor
1914
arguments:
2015
- '@Overblog\GraphQLBundle\Definition\ArgumentFactory'
21-
public: false
2216
tags:
2317
- { name: overblog_graphql.definition_config_processor }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
services:
2+
_defaults:
3+
tags:
4+
- { name: overblog_graphql.expression_function }
5+
6+
# Authorization
7+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Security\GetUser: ~
8+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Security\HasAnyPermission: ~
9+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Security\HasAnyRole: ~
10+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Security\HasPermission: ~
11+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Security\HasRole: ~
12+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Security\IsAnonymous: ~
13+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Security\IsAuthenticated: ~
14+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Security\IsFullyAuthenticated: ~
15+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Security\IsRememberMe: ~
16+
17+
# Config
18+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\DependencyInjection\Parameter: ~
19+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\DependencyInjection\Service: ~
20+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\IsTypeOf: ~
21+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Mutation: ~
22+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Resolver: ~
23+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\NewObject: ~
24+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\Call: ~
25+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Arguments: ~
26+
27+
# relay
28+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Relay\FromGlobalID: ~
29+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Relay\GlobalID: ~
30+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Relay\IdFetcherCallback: ~
31+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Relay\MutateAndGetPayloadCallback: ~
32+
Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Relay\ResolveSingleInputCallback: ~
33+
34+
# aliases
35+
expression_function.parameter_alias:
36+
parent: Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\DependencyInjection\Parameter
37+
arguments:
38+
- param
39+
40+
expression_function.service_alias:
41+
parent: Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\DependencyInjection\Service
42+
arguments:
43+
- serv
44+
45+
expression_function.mutation_alias:
46+
parent: Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Mutation
47+
arguments:
48+
- mut
49+
50+
expression_function.resolver_alias:
51+
parent: Overblog\GraphQLBundle\ExpressionLanguage\ExpressionFunction\GraphQL\Resolver
52+
arguments:
53+
- res

0 commit comments

Comments
 (0)