From 23ac561f394c4f5ba49d9330755ce776b5618bc5 Mon Sep 17 00:00:00 2001 From: Kalpa Perera Date: Mon, 20 Apr 2020 10:56:00 +0530 Subject: [PATCH] Supports PHP 7.2 and added missing doc comments --- composer.json | 2 +- config/config.php | 2 +- src/Console/IndexMeilisearch.php | 23 ++++++++++++-- src/Engines/MeilisearchEngine.php | 49 ++++++++++++++++++++++-------- src/MeilisearchServiceProvider.php | 26 ++++++++++++---- tests/Fixtures/SearchableModel.php | 2 +- tests/MeilisearchEngineTest.php | 16 +++++----- tests/TestCase.php | 2 +- 8 files changed, 88 insertions(+), 34 deletions(-) diff --git a/composer.json b/composer.json index 277fa8e..f70b8ef 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ } ], "require": { - "php": "^7.4", + "php": "^7.2.5", "laravel/scout": "^8.0", "meilisearch/meilisearch-php": "^0.9.0" }, diff --git a/config/config.php b/config/config.php index 8a74eb0..a10f135 100644 --- a/config/config.php +++ b/config/config.php @@ -2,5 +2,5 @@ return [ 'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'), - 'key' => env('MEILISEARCH_KEY', null) + 'key' => env('MEILISEARCH_KEY', null), ]; diff --git a/src/Console/IndexMeilisearch.php b/src/Console/IndexMeilisearch.php index 8b4dbba..a245c9c 100644 --- a/src/Console/IndexMeilisearch.php +++ b/src/Console/IndexMeilisearch.php @@ -2,20 +2,37 @@ namespace Meilisearch\Scout\Console; -use Illuminate\Console\Command; use MeiliSearch\Client; +use Illuminate\Console\Command; use MeiliSearch\Exceptions\HTTPRequestException; -use Meilisearch\Engines\MeilisearchEngine; class IndexMeilisearch extends Command { + /** + * The name and signature of the console command. + * + * @var string + */ protected $signature = 'scout:index {--d|delete : Delete an existing index} {--k|key : The name of primary key} {name : The name of the index}'; + /** + * The console command description. + * + * @var string + */ protected $description = 'Create or delete an index'; + /** + * Execute the console command. + * + * @param \Illuminate\Contracts\Events\Dispatcher $events + * + * @return void + */ public function handle() { $client = new Client(config('meilisearch.host'), config('meilisearch.key')); + try { if ($this->option('delete')) { $client->deleteIndex($this->argument('name')); @@ -28,7 +45,7 @@ public function handle() if ($this->option('key')) { $index = [ 'uid' => $this->argument('name'), - 'primaryKey' => $this->option('key') + 'primaryKey' => $this->option('key'), ]; } $client->createIndex($index); diff --git a/src/Engines/MeilisearchEngine.php b/src/Engines/MeilisearchEngine.php index 19b105b..f4b520e 100644 --- a/src/Engines/MeilisearchEngine.php +++ b/src/Engines/MeilisearchEngine.php @@ -2,13 +2,25 @@ namespace Meilisearch\Scout\Engines; +use Laravel\Scout\Builder; use Laravel\Scout\Engines\Engine; use MeiliSearch\Client as Meilisearch; class MeilisearchEngine extends Engine { - protected Meilisearch $meilisearch; - protected bool $softDelete; + /** + * The Meilisearch client. + * + * @var Meilisearch + */ + protected $meilisearch; + + /** + * Determines if soft deletes for Scout are enabled or not. + * + * @var bool + */ + protected $softDelete; public function __construct(Meilisearch $meilisearch, bool $softDelete = false) { @@ -20,6 +32,7 @@ public function __construct(Meilisearch $meilisearch, bool $softDelete = false) * Update the given model in the index. * * @param \Illuminate\Database\Eloquent\Collection $models + * * @return void */ public function update($models) @@ -42,7 +55,7 @@ public function update($models) return array_merge($searchableData, $model->scoutMetadata()); })->filter()->values()->all(); - if (!empty($objects)) { + if (! empty($objects)) { $index->addDocuments($objects, $models->first()->getKeyName()); } } @@ -51,6 +64,7 @@ public function update($models) * Remove the given model from the index. * * @param \Illuminate\Database\Eloquent\Collection $models + * * @return void */ public function delete($models) @@ -58,7 +72,7 @@ public function delete($models) $index = $this->meilisearch->getIndex($models->first()->searchableAs()); $index->deleteDocuments( - $models->map(fn($model) => $model->getScoutKey()) + $models->map->getScoutKey() ->values() ->all() ); @@ -67,25 +81,27 @@ public function delete($models) /** * Perform the given search on the engine. * - * @param \Laravel\Scout\Builder $builder + * @param Builder $builder + * * @return mixed */ - public function search(\Laravel\Scout\Builder $builder) + public function search(Builder $builder) { return $this->performSearch($builder, array_filter([ - 'limit' => $builder->limit + 'limit' => $builder->limit, ])); } /** * Perform the given search on the engine. * - * @param \Laravel\Scout\Builder $builder + * @param Builder $builder * @param int $perPage * @param int $page + * * @return mixed */ - public function paginate(\Laravel\Scout\Builder $builder, $perPage, $page) + public function paginate(Builder $builder, $perPage, $page) { return $this->performSearch($builder, array_filter([ 'limit' => $perPage, @@ -95,11 +111,12 @@ public function paginate(\Laravel\Scout\Builder $builder, $perPage, $page) /** * Perform the given search on the engine. * - * @param \Laravel\Scout\Builder $builder + * @param Builder $builder * @param array $options + * * @return mixed */ - protected function performSearch(\Laravel\Scout\Builder $builder, array $options = []) + protected function performSearch(Builder $builder, array $options = []) { $meilisearch = $this->meilisearch->getIndex($builder->index ?: $builder->model->searchableAs()); @@ -119,6 +136,7 @@ protected function performSearch(\Laravel\Scout\Builder $builder, array $options * Pluck and return the primary keys of the given results. * * @param mixed $results + * * @return \Illuminate\Support\Collection */ public function mapIds($results) @@ -132,12 +150,13 @@ public function mapIds($results) /** * Map the given results to instances of the given model. * - * @param \Laravel\Scout\Builder $builder + * @param Builder $builder * @param mixed $results * @param \Illuminate\Database\Eloquent\Model $model + * * @return \Illuminate\Database\Eloquent\Collection */ - public function map(\Laravel\Scout\Builder $builder, $results, $model) + public function map(Builder $builder, $results, $model) { if (is_null($results) || count($results['hits']) === 0) { return $model->newCollection(); @@ -159,6 +178,7 @@ public function map(\Laravel\Scout\Builder $builder, $results, $model) * Get the total count from a raw result returned by the engine. * * @param mixed $results + * * @return int */ public function getTotalCount($results) @@ -170,6 +190,7 @@ public function getTotalCount($results) * Flush all of the model's records from the engine. * * @param \Illuminate\Database\Eloquent\Model $model + * * @return void */ public function flush($model) @@ -183,6 +204,7 @@ public function flush($model) * Determine if the given model uses soft deletes. * * @param \Illuminate\Database\Eloquent\Model $model + * * @return bool */ protected function usesSoftDelete($model) @@ -195,6 +217,7 @@ protected function usesSoftDelete($model) * * @param string $method * @param array $parameters + * * @return mixed */ public function __call($method, $parameters) diff --git a/src/MeilisearchServiceProvider.php b/src/MeilisearchServiceProvider.php index c4d7d25..f4c9abf 100644 --- a/src/MeilisearchServiceProvider.php +++ b/src/MeilisearchServiceProvider.php @@ -2,29 +2,43 @@ namespace Meilisearch\Scout; -use Illuminate\Support\ServiceProvider; -use Laravel\Scout\EngineManager; use MeiliSearch\Client; +use Laravel\Scout\EngineManager; +use Illuminate\Support\ServiceProvider; use Meilisearch\Scout\Console\IndexMeilisearch; use Meilisearch\Scout\Engines\MeilisearchEngine; class MeilisearchServiceProvider extends ServiceProvider { + /** + * Register any application services. + * + * @return void + */ public function register() { $this->mergeConfigFrom(__DIR__.'/../config/config.php', 'meilisearch'); } + /** + * Bootstrap any application services. + * + * @return void + */ public function boot() { - if($this->app->runningInConsole()) { + if ($this->app->runningInConsole()) { $this->publishes([ __DIR__.'/../config/config.php' => config_path('meilisearch.php'), ], 'config'); - } - $this->commands([IndexMeilisearch::class]); + $this->commands([IndexMeilisearch::class]); + } - resolve(EngineManager::class)->extend('meilisearch', fn() => new MeilisearchEngine(new Client(config('meilisearch.host'), config('meilisearch.key')))); + resolve(EngineManager::class)->extend('meilisearch', function () { + return new MeilisearchEngine( + new Client(config('meilisearch.host'), config('meilisearch.key')) + ); + }); } } diff --git a/tests/Fixtures/SearchableModel.php b/tests/Fixtures/SearchableModel.php index 8f06525..cab4f20 100644 --- a/tests/Fixtures/SearchableModel.php +++ b/tests/Fixtures/SearchableModel.php @@ -2,8 +2,8 @@ namespace Meilisearch\Scout\Tests\Fixtures; -use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Searchable; +use Illuminate\Database\Eloquent\Model; class SearchableModel extends Model { diff --git a/tests/MeilisearchEngineTest.php b/tests/MeilisearchEngineTest.php index 793d52a..0b63e1b 100644 --- a/tests/MeilisearchEngineTest.php +++ b/tests/MeilisearchEngineTest.php @@ -2,13 +2,13 @@ namespace Meilisearch\Scout\Tests; +use stdClass; +use Mockery as m; use MeiliSearch\Client; -use Illuminate\Database\Eloquent\Collection; use Laravel\Scout\Builder; +use Illuminate\Database\Eloquent\Collection; use Meilisearch\Scout\Engines\MeilisearchEngine; use Meilisearch\Scout\Tests\Fixtures\SearchableModel; -use Mockery as m; -use stdClass; class MeilisearchEngineTest extends TestCase { @@ -24,8 +24,8 @@ public function update_adds_objects_to_index() $client->shouldReceive('getIndex')->with('table')->andReturn($index = m::mock(stdClass::class)); $index->shouldReceive('addDocuments')->with([ [ - 'id' => 1 - ] + 'id' => 1, + ], ]); $engine = new MeilisearchEngine($client); @@ -75,7 +75,7 @@ public function map_correctly_maps_results_to_models() $results = $engine->map($builder, [ 'nbHits' => 1, 'hits' => [ ['id' => 1], - ] + ], ], $model); $this->assertEquals(1, count($results)); @@ -93,7 +93,7 @@ public function map_method_respects_order() new SearchableModel(['id' => 1]), new SearchableModel(['id' => 2]), new SearchableModel(['id' => 3]), - new SearchableModel(['id' => 4]) + new SearchableModel(['id' => 4]), ])); $builder = m::mock(Builder::class); @@ -104,7 +104,7 @@ public function map_method_respects_order() ['id' => 2], ['id' => 4], ['id' => 3], - ] + ], ], $model); $this->assertEquals(4, count($results)); diff --git a/tests/TestCase.php b/tests/TestCase.php index acfde82..a9b22a3 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -14,7 +14,7 @@ public function setUp(): void protected function getPackageProviders($app) { return [ - MeilisearchServiceProvider::class + MeilisearchServiceProvider::class, ]; }