Skip to content

Commit 44eb1a0

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

Some content is hidden

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

55 files changed

+1415
-373
lines changed

.github/workflows/pre-release-tests.yml

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -39,39 +39,30 @@ jobs:
3939
MEILI_NO_ANALYTICS: true
4040
strategy:
4141
matrix:
42-
php-version: ['7.4', '8.1', '8.2', '8.3', '8.4']
43-
sf-version: ['5.4', '6.4', '7.0', '7.1', '7.2', '7.3']
42+
php-version: [ '8.1', '8.2', '8.3', '8.4' ]
43+
sf-version: ['6.4', '7.0', '7.1', '7.2', '7.3' ]
44+
dependencies: [ 'default' ]
4445
exclude:
45-
- php-version: '7.4'
46-
sf-version: '6.4'
47-
- php-version: '7.4'
48-
sf-version: '7.0'
49-
- php-version: '7.4'
50-
sf-version: '7.1'
51-
- php-version: '7.4'
52-
sf-version: '7.3'
53-
- php-version: '8.1'
54-
sf-version: '5.4'
5546
- php-version: '8.1'
5647
sf-version: '7.0'
5748
- php-version: '8.1'
5849
sf-version: '7.1'
5950
- php-version: '8.1'
60-
sf-version: '7.3'
61-
- php-version: '8.2'
62-
sf-version: '5.4'
63-
- php-version: '8.3'
64-
sf-version: '5.4'
65-
- php-version: '8.4'
66-
sf-version: '5.4'
67-
- php-version: '7.4'
68-
sf-version: '7.2'
69-
- php-version: '8.0'
7051
sf-version: '7.2'
7152
- php-version: '8.1'
72-
sf-version: '7.2'
53+
sf-version: '7.3'
54+
include:
55+
- php-version: '8.4'
56+
sf-version: '6.4'
57+
dependencies: 'lowest'
58+
- php-version: '8.4'
59+
sf-version: '6.4'
60+
dependencies: 'highest'
61+
- php-version: '8.4'
62+
sf-version: '7.3'
63+
dependencies: 'highest'
7364

74-
name: integration-tests-against-rc (PHP ${{ matrix.php-version }}) (Symfony ${{ matrix.sf-version }}.*)
65+
name: integration-tests-against-rc (PHP ${{ matrix.php-version }}) (Symfony ${{ matrix.sf-version }}.*)${{ matrix.dependencies != 'default' && format(' ({0})', matrix.dependencies) || '' }}
7566
steps:
7667
- name: Checkout code
7768
uses: actions/checkout@v5
@@ -85,16 +76,13 @@ jobs:
8576
- name: Validate composer.json and composer.lock
8677
run: composer validate
8778

88-
- name: Remove doctrine/annotations
89-
if: matrix.php-version != '7.4'
90-
run: sed -i '/doctrine\/annotations/d' composer.json
91-
9279
- name: Install dependencies
9380
uses: ramsey/composer-install@v3
9481
env:
9582
SYMFONY_REQUIRE: ${{ matrix.sf-version }}.*
9683
with:
97-
dependency-versions: 'highest'
84+
composer-options: --no-interaction --no-progress --prefer-dist --no-security-blocking
85+
dependency-versions: "${{ matrix.dependencies }}"
9886

9987
- name: Run test suite
10088
run: composer test:unit -- --coverage-clover coverage.xml

.github/workflows/tests.yml

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,10 @@ jobs:
2727
MEILI_NO_ANALYTICS: true
2828
strategy:
2929
matrix:
30-
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' ]
30+
php-version: [ '8.1', '8.2', '8.3', '8.4' ]
31+
sf-version: ['6.4', '7.0', '7.1', '7.2', '7.3' ]
3232
dependencies: [ 'default' ]
3333
exclude:
34-
- php-version: '7.4'
35-
sf-version: '6.4'
36-
- php-version: '7.4'
37-
sf-version: '7.0'
38-
- php-version: '7.4'
39-
sf-version: '7.1'
40-
- php-version: '7.4'
41-
sf-version: '7.2'
42-
- php-version: '7.4'
43-
sf-version: '7.3'
44-
- php-version: '8.1'
45-
sf-version: '5.4'
4634
- php-version: '8.1'
4735
sf-version: '7.0'
4836
- php-version: '8.1'
@@ -51,19 +39,7 @@ jobs:
5139
sf-version: '7.2'
5240
- php-version: '8.1'
5341
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'
6042
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'
6743
- php-version: '8.4'
6844
sf-version: '6.4'
6945
dependencies: 'lowest'
@@ -88,10 +64,6 @@ jobs:
8864
- name: Validate composer.json
8965
run: composer validate
9066

91-
- name: Remove doctrine/annotations
92-
if: matrix.php-version != '7.4'
93-
run: sed -i '/doctrine\/annotations/d' composer.json
94-
9567
- name: Install dependencies
9668
uses: ramsey/composer-install@v3
9769
env:

composer.json

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,37 @@
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/property-access": "^6.4 || ^7.0",
29+
"symfony/serializer": "^6.4 || ^7.0"
3230
},
3331
"require-dev": {
34-
"doctrine/annotations": "^2.0.0",
32+
"doctrine/doctrine-bundle": "^2.10 || ^3.0",
3533
"doctrine/orm": "^2.12 || ^3.0",
3634
"matthiasnoback/symfony-config-test": "^4.3 || ^5.2",
3735
"matthiasnoback/symfony-dependency-injection-test": "^4.3 || ^5.1",
3836
"nikic/php-parser": "^5.6.2",
3937
"nyholm/psr7": "^1.8.2",
40-
"php-cs-fixer/shim": "^3.88.2",
38+
"php-cs-fixer/shim": "^3.90.0",
4139
"phpmd/phpmd": "^2.15",
4240
"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",
41+
"phpstan/phpstan": "^2.1.32",
42+
"phpstan/phpstan-doctrine": "^2.0.11",
43+
"phpstan/phpstan-phpunit": "^2.0.8",
4644
"phpstan/phpstan-symfony": "^2.0.8",
4745
"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",
46+
"symfony/doctrine-bridge": "^6.4 || ^7.0",
47+
"symfony/filesystem": "^6.4 || ^7.0",
48+
"symfony/framework-bundle": "^6.4 || ^7.0",
49+
"symfony/http-client": "^6.4.15 || ^7.1.8",
5250
"symfony/phpunit-bridge": "^7.3",
53-
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
51+
"symfony/yaml": "^6.4 || ^7.0"
5452
},
5553
"autoload": {
5654
"psr-4": {

config/services.php

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
use Meilisearch\Bundle\Command\MeilisearchUpdateSettingsCommand;
1010
use Meilisearch\Bundle\Engine;
1111
use Meilisearch\Bundle\EventListener\DoctrineEventSubscriber;
12+
use Meilisearch\Bundle\SearchManagerInterface;
1213
use Meilisearch\Bundle\SearchService;
14+
use Meilisearch\Bundle\Services\MeilisearchManager;
1315
use Meilisearch\Bundle\Services\MeilisearchService;
1416
use Meilisearch\Bundle\Services\SettingsUpdater;
1517
use Meilisearch\Bundle\Services\UnixTimestampNormalizer;
@@ -30,15 +32,18 @@
3032
service('meilisearch.engine'),
3133
abstract_arg('configuration'),
3234
service('property_accessor'),
35+
service('meilisearch.manager'),
3336
]);
3437

3538
$services->alias('search.service', 'meilisearch.service')
3639
->public()
3740
->deprecate('meilisearch/search-bundle', '0.14', 'The "%alias_id%" service alias is deprecated. Use "meilisearch.service" instead.');
3841

42+
$services->alias(SearchService::class, 'meilisearch.service');
43+
3944
$services->set('meilisearch.search_indexer_subscriber', DoctrineEventSubscriber::class)
4045
->public()
41-
->args([service('meilisearch.service')]);
46+
->args([service('meilisearch.manager')]);
4247

4348
$services->alias('search.search_indexer_subscriber', 'meilisearch.search_indexer_subscriber')
4449
->deprecate('meilisearch/search-bundle', '0.14', 'The "%alias_id%" service alias is deprecated. Use "meilisearch.search_indexer_subscriber" instead.');
@@ -62,38 +67,45 @@
6267
$services->alias(Client::class, 'meilisearch.client')
6368
->public();
6469

65-
$services->alias(SearchService::class, 'meilisearch.service');
70+
$services->set('meilisearch.manager', MeilisearchManager::class)
71+
->args([
72+
abstract_arg('normalizer'),
73+
service('meilisearch.engine'),
74+
service('property_accessor'),
75+
abstract_arg('configuration'),
76+
abstract_arg('data providers'),
77+
]);
78+
$services->alias(SearchManagerInterface::class, 'meilisearch.manager');
6679

6780
$services->set('meilisearch.settings_updater', SettingsUpdater::class)
6881
->args([
69-
service('meilisearch.service'),
82+
service('meilisearch.manager'),
7083
service('meilisearch.client'),
7184
service('event_dispatcher'),
7285
]);
7386

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

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

8093
$services->set(MeilisearchCreateCommand::class)
8194
->args([
82-
service('meilisearch.service'),
95+
service('meilisearch.manager'),
8396
service('meilisearch.client'),
8497
service('meilisearch.settings_updater'),
8598
service('event_dispatcher'),
8699
])
87100
->tag('console.command', ['command' => 'meilisearch:create|meili:create', 'description' => 'Create indexes']);
88101

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

93106
$services->set(MeilisearchImportCommand::class)
94107
->args([
95-
service('meilisearch.service'),
96-
service('doctrine'),
108+
service('meilisearch.manager'),
97109
service('meilisearch.client'),
98110
service('meilisearch.settings_updater'),
99111
service('event_dispatcher'),
@@ -102,7 +114,7 @@
102114

103115
$services->set(MeilisearchUpdateSettingsCommand::class)
104116
->args([
105-
service('meilisearch.service'),
117+
service('meilisearch.manager'),
106118
service('meilisearch.settings_updater'),
107119
service('event_dispatcher'),
108120
])

phpstan-baseline.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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+
$ignoreErrors[] = [
11+
'message' => '#^Call to static method getClass\\(\\) on an unknown class Doctrine\\\\Common\\\\Util\\\\ClassUtils\\.$#',
12+
'identifier' => 'class.notFound',
13+
'count' => 1,
14+
'path' => __DIR__ . '/src/Services/MeilisearchService.php',
15+
];
16+
$ignoreErrors[] = [
17+
'message' => '#^Offset \'hits\' on array\\{hits\\: array\\<int, mixed\\>, query\\: string, processingTimeMs\\: int, limit\\: int, offset\\: int, estimatedTotalHits\\: int, requestUid\\: non\\-empty\\-string, nbHits\\: int\\} in isset\\(\\) always exists and is not nullable\\.$#',
18+
'identifier' => 'isset.offset',
19+
'count' => 1,
20+
'path' => __DIR__ . '/src/Services/MeilisearchService.php',
21+
];
22+
23+
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>";

0 commit comments

Comments
 (0)