Skip to content

Commit a8ad4dd

Browse files
committed
Add Data providers extension point
1 parent 1311679 commit a8ad4dd

Some content is hidden

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

51 files changed

+1239
-940
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
strategy:
2929
matrix:
3030
php-version: [ '7.4', '8.1', '8.2', '8.3', '8.4' ]
31-
sf-version: [ '5.4', '6.4', '7.0', '7.1', '7.2', '7.3' ]
31+
sf-version: ['6.4', '7.0', '7.1', '7.2', '7.3' ]
3232
dependencies: [ 'default' ]
3333
exclude:
3434
- php-version: '7.4'
@@ -41,8 +41,6 @@ jobs:
4141
sf-version: '7.2'
4242
- php-version: '7.4'
4343
sf-version: '7.3'
44-
- php-version: '8.1'
45-
sf-version: '5.4'
4644
- php-version: '8.1'
4745
sf-version: '7.0'
4846
- php-version: '8.1'
@@ -51,19 +49,7 @@ jobs:
5149
sf-version: '7.2'
5250
- php-version: '8.1'
5351
sf-version: '7.3'
54-
- php-version: '8.2'
55-
sf-version: '5.4'
56-
- php-version: '8.3'
57-
sf-version: '5.4'
58-
- php-version: '8.4'
59-
sf-version: '5.4'
6052
include:
61-
- php-version: '7.4'
62-
sf-version: '5.4'
63-
dependencies: 'lowest'
64-
- php-version: '7.4'
65-
sf-version: '5.4'
66-
dependencies: 'highest'
6753
- php-version: '8.4'
6854
sf-version: '6.4'
6955
dependencies: 'lowest'

composer.json

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,39 @@
1818
}
1919
],
2020
"require": {
21-
"php": "^7.4|^8.0",
21+
"php": "^8.1",
2222
"ext-json": "*",
23-
"doctrine/doctrine-bundle": "^2.10 || ^3.0",
2423
"meilisearch/meilisearch-php": "^1.16",
25-
"symfony/config": "^5.4 || ^6.0 || ^7.0",
26-
"symfony/dependency-injection": "^5.4.17 || ^6.0 || ^7.0",
27-
"symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
28-
"symfony/http-kernel": "^5.4 || ^6.0 || ^7.0",
29-
"symfony/polyfill-php80": "^1.27",
30-
"symfony/property-access": "^5.4 || ^6.0 || ^7.0",
31-
"symfony/serializer": "^5.4 || ^6.0 || ^7.0"
24+
"symfony/config": "^6.4 || ^7.0",
25+
"symfony/dependency-injection": "^6.4 || ^7.0",
26+
"symfony/event-dispatcher": "^6.4 || ^7.0",
27+
"symfony/http-kernel": "^6.4 || ^7.0",
28+
"symfony/polyfill-php80": "^1.33",
29+
"symfony/property-access": "^6.4 || ^7.0",
30+
"symfony/serializer": "^6.4 || ^7.0"
3231
},
3332
"require-dev": {
34-
"doctrine/annotations": "^2.0.0",
33+
"doctrine/annotations": "^2.0.2",
34+
"doctrine/doctrine-bundle": "^2.10 || ^3.0",
3535
"doctrine/orm": "^2.12 || ^3.0",
3636
"matthiasnoback/symfony-config-test": "^4.3 || ^5.2",
3737
"matthiasnoback/symfony-dependency-injection-test": "^4.3 || ^5.1",
3838
"nikic/php-parser": "^5.6.2",
3939
"nyholm/psr7": "^1.8.2",
40-
"php-cs-fixer/shim": "^3.88.2",
40+
"php-cs-fixer/shim": "^3.90.0",
4141
"phpmd/phpmd": "^2.15",
4242
"phpstan/extension-installer": "^1.4.3",
43-
"phpstan/phpstan": "^2.1.31",
44-
"phpstan/phpstan-doctrine": "^2.0.10",
45-
"phpstan/phpstan-phpunit": "^2.0.7",
43+
"phpstan/phpstan": "^2.1.32",
44+
"phpstan/phpstan-doctrine": "^2.0.11",
45+
"phpstan/phpstan-phpunit": "^2.0.8",
4646
"phpstan/phpstan-symfony": "^2.0.8",
4747
"phpunit/php-code-coverage": "^9.2.32",
48-
"symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0",
49-
"symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
50-
"symfony/framework-bundle": "^5.4.17 || ^6.0 || ^7.0",
51-
"symfony/http-client": "^5.4.47 || ^6.4.15 || ^7.1.8",
48+
"symfony/doctrine-bridge": "^6.4 || ^7.0",
49+
"symfony/filesystem": "^6.4 || ^7.0",
50+
"symfony/framework-bundle": "^6.4 || ^7.0",
51+
"symfony/http-client": "^6.4.15 || ^7.1.8",
5252
"symfony/phpunit-bridge": "^7.3",
53-
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
53+
"symfony/yaml": "^6.4 || ^7.0"
5454
},
5555
"autoload": {
5656
"psr-4": {

config/services.php

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
use Meilisearch\Bundle\Command\MeilisearchUpdateSettingsCommand;
1010
use Meilisearch\Bundle\Engine;
1111
use Meilisearch\Bundle\EventListener\DoctrineEventSubscriber;
12-
use Meilisearch\Bundle\SearchService;
13-
use Meilisearch\Bundle\Services\MeilisearchService;
12+
use Meilisearch\Bundle\Services\MeilisearchManager;
1413
use Meilisearch\Bundle\Services\SettingsUpdater;
1514
use Meilisearch\Bundle\Services\UnixTimestampNormalizer;
1615
use Meilisearch\Client;
@@ -23,25 +22,9 @@
2322

2423
$services->alias(Engine::class, 'meilisearch.engine');
2524

26-
$services->set('meilisearch.service', MeilisearchService::class)
27-
->public()
28-
->args([
29-
abstract_arg('normalizer'),
30-
service('meilisearch.engine'),
31-
abstract_arg('configuration'),
32-
service('property_accessor'),
33-
]);
34-
35-
$services->alias('search.service', 'meilisearch.service')
36-
->public()
37-
->deprecate('meilisearch/search-bundle', '0.14', 'The "%alias_id%" service alias is deprecated. Use "meilisearch.service" instead.');
38-
3925
$services->set('meilisearch.search_indexer_subscriber', DoctrineEventSubscriber::class)
4026
->public()
41-
->args([service('meilisearch.service')]);
42-
43-
$services->alias('search.search_indexer_subscriber', 'meilisearch.search_indexer_subscriber')
44-
->deprecate('meilisearch/search-bundle', '0.14', 'The "%alias_id%" service alias is deprecated. Use "meilisearch.search_indexer_subscriber" instead.');
27+
->args([service('meilisearch.manager')]);
4528

4629
$services->set('meilisearch.client', Client::class)
4730
->public()
@@ -55,45 +38,47 @@
5538
null,
5639
]);
5740

58-
$services->alias('search.client', 'meilisearch.client')
59-
->public()
60-
->deprecate('meilisearch/search-bundle', '0.14', 'The "%alias_id%" service alias is deprecated. Use "meilisearch.client" instead.');
61-
6241
$services->alias(Client::class, 'meilisearch.client')
6342
->public();
6443

65-
$services->alias(SearchService::class, 'meilisearch.service');
44+
$services->set('meilisearch.manager', MeilisearchManager::class)
45+
->args([
46+
abstract_arg('normalizer'),
47+
service('meilisearch.engine'),
48+
service('property_accessor'),
49+
abstract_arg('configuration'),
50+
tagged_iterator('meilisearch.data_provider', 'key'),
51+
]);
6652

6753
$services->set('meilisearch.settings_updater', SettingsUpdater::class)
6854
->args([
69-
service('meilisearch.service'),
55+
service('meilisearch.manager'),
7056
service('meilisearch.client'),
7157
service('event_dispatcher'),
7258
]);
7359

7460
$services->alias(SettingsUpdater::class, 'meilisearch.settings_updater');
7561

7662
$services->set(MeilisearchClearCommand::class)
77-
->args([service('meilisearch.service')])
63+
->args([service('meilisearch.manager')])
7864
->tag('console.command', ['command' => 'meilisearch:clear|meili:clear', 'description' => 'Clear the index documents']);
7965

8066
$services->set(MeilisearchCreateCommand::class)
8167
->args([
82-
service('meilisearch.service'),
68+
service('meilisearch.manager'),
8369
service('meilisearch.client'),
8470
service('meilisearch.settings_updater'),
8571
service('event_dispatcher'),
8672
])
8773
->tag('console.command', ['command' => 'meilisearch:create|meili:create', 'description' => 'Create indexes']);
8874

8975
$services->set(MeilisearchDeleteCommand::class)
90-
->args([service('meilisearch.service')])
76+
->args([service('meilisearch.manager')])
9177
->tag('console.command', ['command' => 'meilisearch:delete|meili:delete', 'description' => 'Delete the indexes']);
9278

9379
$services->set(MeilisearchImportCommand::class)
9480
->args([
95-
service('meilisearch.service'),
96-
service('doctrine'),
81+
service('meilisearch.manager'),
9782
service('meilisearch.client'),
9883
service('meilisearch.settings_updater'),
9984
service('event_dispatcher'),
@@ -102,7 +87,7 @@
10287

10388
$services->set(MeilisearchUpdateSettingsCommand::class)
10489
->args([
105-
service('meilisearch.service'),
90+
service('meilisearch.manager'),
10691
service('meilisearch.settings_updater'),
10792
service('event_dispatcher'),
10893
])

phpstan-baseline.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php declare(strict_types = 1);
2+
3+
$ignoreErrors = [];
4+
$ignoreErrors[] = [
5+
'message' => '#^Call to static method getClass\\(\\) on an unknown class Doctrine\\\\Common\\\\Util\\\\ClassUtils\\.$#',
6+
'identifier' => 'class.notFound',
7+
'count' => 1,
8+
'path' => __DIR__ . '/src/Services/MeilisearchManager.php',
9+
];
10+
11+
return ['parameters' => ['ignoreErrors' => $ignoreErrors]];

phpstan.dist.neon

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
includes:
2+
- phpstan-baseline.php
3+
14
parameters:
25
bootstrapFiles:
36
- vendor/bin/.phpunit/phpunit/vendor/autoload.php
47
level: 5
58
paths:
69
- src
710
- tests
8-
ignoreErrors:
9-
- '#Call to static method getClass\(\) on an unknown class Doctrine\\Common\\Util\\ClassUtils#'
10-
- '#Parameter \#1 \$array of function array_unique expects an array of values castable to string, list<class-string<Meilisearch\\Bundle\\Entity\\Aggregator>\|Meilisearch\\Bundle\\Entity\\Aggregator> given#'

src/Command/IndexCommand.php

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace Meilisearch\Bundle\Command;
66

77
use Meilisearch\Bundle\Collection;
8-
use Meilisearch\Bundle\SearchService;
8+
use Meilisearch\Bundle\SearchManagerInterface;
99
use Symfony\Component\Console\Command\Command;
1010
use Symfony\Component\Console\Input\InputInterface;
1111
use Symfony\Component\Console\Output\OutputInterface;
@@ -14,21 +14,18 @@ abstract class IndexCommand extends Command
1414
{
1515
protected const DEFAULT_RESPONSE_TIMEOUT = 5000;
1616

17-
protected SearchService $searchService;
18-
1917
private string $prefix;
2018

21-
public function __construct(SearchService $searchService)
19+
public function __construct(protected SearchManagerInterface $searchManager)
2220
{
23-
$this->searchService = $searchService;
24-
$this->prefix = $this->searchService->getConfiguration()->get('prefix');
21+
$this->prefix = $this->searchManager->getConfiguration()->get('prefix');
2522

2623
parent::__construct();
2724
}
2825

2926
protected function getEntitiesFromArgs(InputInterface $input, OutputInterface $output): Collection
3027
{
31-
$indices = new Collection($this->searchService->getConfiguration()->get('indices'));
28+
$indices = new Collection($this->searchManager->getConfiguration()->get('indices'));
3229
$indexNames = new Collection();
3330

3431
if ($indexList = $input->getOption('indices')) {

src/Command/MeilisearchClearCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
2727
$indexName = $index['prefixed_name'];
2828
$className = $index['class'];
2929
$msg = "Cleared <info>$indexName</info> index of <comment>$className</comment>";
30-
$array = $this->searchService->clear($className);
30+
$array = $this->searchManager->clear($className);
3131

3232
if ('failed' === $array['status']) {
3333
$msg = "<error>Index <info>$indexName</info> couldn\'t be cleared</error>";

src/Command/MeilisearchCreateCommand.php

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Meilisearch\Bundle\Collection;
88
use Meilisearch\Bundle\EventListener\ConsoleOutputSubscriber;
99
use Meilisearch\Bundle\Model\Aggregator;
10-
use Meilisearch\Bundle\SearchService;
10+
use Meilisearch\Bundle\SearchManagerInterface;
1111
use Meilisearch\Bundle\Services\SettingsUpdater;
1212
use Meilisearch\Client;
1313
use Symfony\Component\Console\Attribute\AsCommand;
@@ -20,17 +20,13 @@
2020
#[AsCommand(name: 'meilisearch:create', description: 'Create indexes', aliases: ['meili:create'])]
2121
final class MeilisearchCreateCommand extends IndexCommand
2222
{
23-
private Client $searchClient;
24-
private SettingsUpdater $settingsUpdater;
25-
private EventDispatcherInterface $eventDispatcher;
26-
27-
public function __construct(SearchService $searchService, Client $searchClient, SettingsUpdater $settingsUpdater, EventDispatcherInterface $eventDispatcher)
28-
{
29-
parent::__construct($searchService);
30-
31-
$this->searchClient = $searchClient;
32-
$this->settingsUpdater = $settingsUpdater;
33-
$this->eventDispatcher = $eventDispatcher;
23+
public function __construct(
24+
SearchManagerInterface $searchManager,
25+
private readonly Client $searchClient,
26+
private readonly SettingsUpdater $settingsUpdater,
27+
private readonly EventDispatcherInterface $eventDispatcher,
28+
) {
29+
parent::__construct($searchManager);
3430
}
3531

3632
protected function configure(): void
@@ -67,7 +63,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
6763
foreach ($entitiesToIndex as $index) {
6864
$entityClassName = $index['class'];
6965

70-
if (!$this->searchService->isSearchable($entityClassName)) {
66+
if (!$this->searchManager->isSearchable($entityClassName)) {
7167
continue;
7268
}
7369

src/Command/MeilisearchDeleteCommand.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
2929
$indexName = $index['prefixed_name'];
3030

3131
try {
32-
$this->searchService->deleteByIndexName($indexName);
32+
$this->searchManager->deleteByIndexName($indexName);
3333
} catch (ApiException $e) {
3434
$output->writeln('Cannot delete '.$indexName.': '.$e->getMessage());
3535

0 commit comments

Comments
 (0)