Skip to content

Commit ecd40c1

Browse files
Merge #285
285: Remove autowiring r=norkunas a=norkunas # Pull Request ## Related issue Fixes #279 ## What does this PR do? - Removes services autowiring as they should be defined explicitly. ## PR checklist Please check if your PR fulfills the following requirements: - [x] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)? - [x] Have you read the contributing guidelines? - [x] Have you made sure that the title is accurate and descriptive of the changes? Co-authored-by: Tomas <[email protected]>
2 parents 16284a4 + b84b762 commit ecd40c1

12 files changed

+101
-128
lines changed

Diff for: config/services.xml

+43-11
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,35 @@
44
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">
55

66
<services>
7-
<defaults autowire="true" autoconfigure="true" />
7+
<service id="meilisearch.engine" class="Meilisearch\Bundle\Engine">
8+
<argument type="service" id="meilisearch.client" />
9+
</service>
810

9-
<prototype namespace="Meilisearch\Bundle\Command\" resource="../src/Command" />
11+
<!-- After bumping to Symfony >5.1 deeprecate public services into private services -->
12+
<service id="meilisearch.service" class="Meilisearch\Bundle\Services\MeilisearchService" public="true">
13+
<argument /><!-- After bumping to Symfony 5.1 use type="abstract" -->
14+
<argument type="service" id="meilisearch.engine" />
15+
<argument type="collection" /><!-- After bumping to Symfony 5.1 use type="abstract" -->
16+
<argument type="service" id="property_accessor" />
17+
</service>
18+
<service id="search.service" alias="meilisearch.service" public="true">
19+
<deprecated package="meilisearch/search-bundle" version="0.14">The "%alias_id%" service alias is deprecated. Use "meilisearch.service" instead.</deprecated>
20+
</service>
1021

11-
<service id="meilisearch.search_indexer_subscriber"
12-
class="Meilisearch\Bundle\EventListener\DoctrineEventSubscriber"
13-
public="true">
22+
<service id="meilisearch.search_indexer_subscriber" class="Meilisearch\Bundle\EventListener\DoctrineEventSubscriber" public="true">
1423
<argument type="service" id="meilisearch.service" />
1524
</service>
1625
<service id="search.search_indexer_subscriber" alias="meilisearch.search_indexer_subscriber">
1726
<deprecated package="meilisearch/search-bundle" version="0.14">The "%alias_id%" service alias is deprecated. Use "meilisearch.search_indexer_subscriber" instead.</deprecated>
1827
</service>
1928

2029
<service id="meilisearch.client" class="Meilisearch\Client" public="true" lazy="true">
21-
<argument key="$url">%meili_url%</argument>
22-
<argument key="$apiKey">%meili_api_key%</argument>
23-
<argument key="$httpClient" type="service" id="psr18.http_client" on-invalid="ignore" />
24-
<argument key="$clientAgents" type="collection">
25-
<argument>%meili_symfony_version%</argument>
26-
</argument>
30+
<argument /><!-- url -->
31+
<argument /><!-- api key -->
32+
<argument type="service" id="psr18.http_client" on-invalid="ignore" /><!-- http client -->
33+
<argument>null</argument><!-- request factory -->
34+
<argument /><!-- client agents -->
35+
<argument>null</argument><!-- stream factory -->
2736
</service>
2837
<service id="search.client" alias="meilisearch.client" public="true">
2938
<deprecated package="meilisearch/search-bundle" version="0.14">The "%alias_id%" service alias is deprecated. Use "meilisearch.client" instead.</deprecated>
@@ -34,5 +43,28 @@
3443
<deprecated package="meilisearch/search-bundle" version="0.14">The "%alias_id%" service alias is deprecated. Use "meilisearch.client" instead.</deprecated>
3544
</service>
3645
<service id="Meilisearch\Bundle\SearchService" alias="meilisearch.service" />
46+
47+
<service id="Meilisearch\Bundle\Command\MeilisearchClearCommand">
48+
<argument type="service" id="meilisearch.service" />
49+
<tag name="console.command" />
50+
</service>
51+
52+
<service id="Meilisearch\Bundle\Command\MeilisearchCreateCommand">
53+
<argument type="service" id="meilisearch.service" />
54+
<argument type="service" id="meilisearch.client" />
55+
<tag name="console.command" />
56+
</service>
57+
58+
<service id="Meilisearch\Bundle\Command\MeilisearchDeleteCommand">
59+
<argument type="service" id="meilisearch.service" />
60+
<tag name="console.command" />
61+
</service>
62+
63+
<service id="Meilisearch\Bundle\Command\MeilisearchImportCommand">
64+
<argument type="service" id="meilisearch.service" />
65+
<argument type="service" id="doctrine" />
66+
<argument type="service" id="meilisearch.client" />
67+
<tag name="console.command" />
68+
</service>
3769
</services>
3870
</container>

Diff for: src/DependencyInjection/Configuration.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ public function getConfigTreeBuilder(): TreeBuilder
1717

1818
$rootNode
1919
->children()
20-
->scalarNode('url')->end()
20+
->scalarNode('url')->defaultValue('http://localhost:7700')->end()
2121
->scalarNode('api_key')->end()
2222
->scalarNode('prefix')
23-
->defaultValue(null)
23+
->defaultNull()
2424
->end()
2525
->scalarNode('nbResults')
2626
->defaultValue(20)

Diff for: src/DependencyInjection/MeilisearchExtension.php

+7-11
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,9 @@
44

55
namespace Meilisearch\Bundle\DependencyInjection;
66

7-
use Meilisearch\Bundle\Engine;
87
use Meilisearch\Bundle\MeilisearchBundle;
9-
use Meilisearch\Bundle\Services\MeilisearchService;
108
use Symfony\Component\Config\FileLocator;
119
use Symfony\Component\DependencyInjection\ContainerBuilder;
12-
use Symfony\Component\DependencyInjection\Definition;
1310
use Symfony\Component\DependencyInjection\Loader;
1411
use Symfony\Component\DependencyInjection\Reference;
1512
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
@@ -47,15 +44,14 @@ public function load(array $configs, ContainerBuilder $container): void
4744
$container->removeDefinition('meilisearch.search_indexer_subscriber');
4845
}
4946

50-
$engineDefinition = new Definition(Engine::class, [new Reference('meilisearch.client')]);
47+
$container->findDefinition('meilisearch.client')
48+
->replaceArgument(0, $config['url'])
49+
->replaceArgument(1, $config['api_key'])
50+
->replaceArgument(4, [MeilisearchBundle::qualifiedVersion()]);
5151

52-
$searchDefinition = (new Definition(
53-
MeilisearchService::class,
54-
[new Reference($config['serializer']), $engineDefinition, $config]
55-
));
56-
57-
$container->setDefinition('meilisearch.service', $searchDefinition->setPublic(true));
58-
$container->setAlias('search.service', 'meilisearch.service')->setPublic(true);
52+
$container->findDefinition('meilisearch.service')
53+
->replaceArgument(0, new Reference($config['serializer']))
54+
->replaceArgument(2, $config);
5955
}
6056

6157
/**

Diff for: src/Services/MeilisearchService.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
use Meilisearch\Bundle\SearchService;
1616
use Symfony\Component\Config\Definition\Exception\Exception;
1717
use Symfony\Component\PropertyAccess\PropertyAccess;
18-
use Symfony\Component\PropertyAccess\PropertyAccessor;
18+
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
1919
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
2020

2121
final class MeilisearchService implements SearchService
2222
{
2323
private NormalizerInterface $normalizer;
2424
private Engine $engine;
2525
private Collection $configuration;
26-
private PropertyAccessor $propertyAccessor;
26+
private PropertyAccessorInterface $propertyAccessor;
2727
/**
2828
* @var list<class-string>
2929
*/
@@ -42,12 +42,12 @@ final class MeilisearchService implements SearchService
4242
private array $classToSerializerGroup;
4343
private array $indexIfMapping;
4444

45-
public function __construct(NormalizerInterface $normalizer, Engine $engine, array $configuration)
45+
public function __construct(NormalizerInterface $normalizer, Engine $engine, array $configuration, PropertyAccessorInterface $propertyAccessor = null)
4646
{
4747
$this->normalizer = $normalizer;
4848
$this->engine = $engine;
4949
$this->configuration = new Collection($configuration);
50-
$this->propertyAccessor = PropertyAccess::createPropertyAccessor();
50+
$this->propertyAccessor = $propertyAccessor ?? PropertyAccess::createPropertyAccessor();
5151

5252
$this->setSearchableEntities();
5353
$this->setAggregatorsAndEntitiesAggregators();

Diff for: tests/BaseKernelTestCase.php

+12-12
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,22 @@
1616
use Meilisearch\Bundle\Tests\Entity\Page;
1717
use Meilisearch\Bundle\Tests\Entity\Post;
1818
use Meilisearch\Bundle\Tests\Entity\Tag;
19+
use Meilisearch\Client;
1920
use Meilisearch\Exceptions\ApiException;
2021
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
2122

2223
abstract class BaseKernelTestCase extends KernelTestCase
2324
{
2425
protected EntityManagerInterface $entityManager;
26+
protected Client $client;
2527
protected SearchService $searchService;
2628

2729
protected function setUp(): void
2830
{
2931
self::bootKernel();
3032

3133
$this->entityManager = $this->get('doctrine.orm.entity_manager');
34+
$this->client = $this->get('meilisearch.client');
3235
$this->searchService = $this->get('meilisearch.service');
3336

3437
$metaData = $this->entityManager->getMetadataFactory()->getAllMetadata();
@@ -39,10 +42,7 @@ protected function setUp(): void
3942
$this->cleanUp();
4043
}
4144

42-
/**
43-
* @param int|string|null $id
44-
*/
45-
protected function createPost($id = null): Post
45+
protected function createPost(int $id = null): Post
4646
{
4747
$post = new Post();
4848
$post->setTitle('Test Post');
@@ -83,10 +83,7 @@ protected function createSearchablePost(): SearchableEntity
8383
);
8484
}
8585

86-
/**
87-
* @param int|string|null $id
88-
*/
89-
protected function createComment($id = null): Comment
86+
protected function createComment(int $id = null): Comment
9087
{
9188
$post = new Post(['title' => 'What a post!']);
9289
$comment = new Comment();
@@ -104,10 +101,7 @@ protected function createComment($id = null): Comment
104101
return $comment;
105102
}
106103

107-
/**
108-
* @param int|string|null $id
109-
*/
110-
protected function createImage($id = null): Image
104+
protected function createImage(int $id = null): Image
111105
{
112106
$image = new Image();
113107
$image->setUrl('https://docs.meilisearch.com/logo.png');
@@ -185,6 +179,12 @@ protected function getFileName(string $indexName, string $type): string
185179
return sprintf('%s/%s.json', $indexName, $type);
186180
}
187181

182+
protected function waitForAllTasks(): void
183+
{
184+
$firstTask = $this->client->getTasks()->getResults()[0];
185+
$this->client->waitForTask($firstTask['uid']);
186+
}
187+
188188
private function cleanUp(): void
189189
{
190190
(new Collection($this->searchService->getConfiguration()->get('indices')))

Diff for: tests/Integration/CommandsTest.php

-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
use Meilisearch\Bundle\Tests\Entity\DummyCustomGroups;
99
use Meilisearch\Bundle\Tests\Entity\DynamicSettings;
1010
use Meilisearch\Bundle\Tests\Entity\SelfNormalizable;
11-
use Meilisearch\Client;
1211
use Meilisearch\Endpoints\Indexes;
1312
use Meilisearch\Exceptions\ApiException;
1413
use Meilisearch\Search\SearchResult;
@@ -22,7 +21,6 @@ class CommandsTest extends BaseKernelTestCase
2221
{
2322
private static string $indexName = 'posts';
2423

25-
protected Client $client;
2624
protected Application $application;
2725
protected Indexes $index;
2826

@@ -34,7 +32,6 @@ protected function setUp(): void
3432
{
3533
parent::setUp();
3634

37-
$this->client = $this->get('meilisearch.client');
3835
$this->index = $this->client->index($this->getPrefix().self::$indexName);
3936
$this->application = new Application(self::createKernel());
4037
}

Diff for: tests/Integration/DependencyInjectionTest.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ protected function getContainerExtensions(): array
1919

2020
public function testHasMeilisearchVersionDefinitionAfterLoad(): void
2121
{
22-
$this->load();
22+
$this->load(['url' => 'http://meilisearch:7700', 'api_key' => null]);
2323

24-
$this->assertContainerBuilderHasServiceDefinitionWithArgument('meilisearch.client', '$clientAgents', ['%meili_symfony_version%']);
24+
$this->assertContainerBuilderHasServiceDefinitionWithArgument('meilisearch.client', 4, [MeilisearchBundle::qualifiedVersion()]);
2525
}
2626

2727
public function testHasMeilisearchVersionFromConstantAfterLoad(): void
2828
{
29-
$this->load();
29+
$this->load(['url' => 'http://meilisearch:7700', 'api_key' => null]);
3030

3131
$this->assertContainerBuilderHasParameter('meili_symfony_version', MeilisearchBundle::qualifiedVersion());
3232
}

0 commit comments

Comments
 (0)