Skip to content
This repository was archived by the owner on Jan 9, 2024. It is now read-only.

Commit d433003

Browse files
committed
Refactor dependencies to prepare for testing
1 parent 9634a7a commit d433003

File tree

9 files changed

+81
-98
lines changed

9 files changed

+81
-98
lines changed

src/Engines/Modes/Boolean.php

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,25 @@
77

88
class Boolean extends Mode
99
{
10-
protected $modelService;
1110

12-
function __construct(Builder $builder)
13-
{
14-
parent::__construct($builder);
15-
16-
$this->modelService = resolve(ModelService::class);
17-
$this->modelService->setModel($this->builder->model);
18-
}
19-
20-
public function buildWhereRawString()
11+
public function buildWhereRawString(Builder $builder)
2112
{
2213
$queryString = '';
2314

24-
$queryString .= $this->buildWheres();
2515

26-
$indexFields = implode(',', $this->modelService->getFullTextIndexFields());
16+
$queryString .= $this->buildWheres($builder);
17+
18+
$indexFields = implode(',', $this->modelService->setModel($builder->model)->getFullTextIndexFields());
2719

2820
$queryString .= "MATCH($indexFields) AGAINST(:_search IN BOOLEAN MODE)";
2921

3022
return $queryString;
3123
}
3224

33-
public function buildParams()
25+
public function buildParams(Builder $builder)
3426
{
3527

36-
$this->whereParams['_search'] = $this->builder->query;
28+
$this->whereParams['_search'] = $builder->query;
3729
return $this->whereParams;
3830
}
3931

src/Engines/Modes/Like.php

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,16 @@
66

77
class Like extends Mode
88
{
9-
10-
protected $modelService;
11-
129
protected $fields;
1310

14-
function __construct(Builder $builder)
11+
public function buildWhereRawString(Builder $builder)
1512
{
16-
parent::__construct($builder);
1713

18-
$this->modelService = resolve(ModelService::class);
19-
$this->modelService->setModel($this->builder->model);
20-
}
21-
22-
public function buildWhereRawString()
23-
{
2414
$queryString = '';
2515

26-
$this->fields = $this->modelService->getSearchableFields();
16+
$this->fields = $this->modelService->setModel($builder->model)->getSearchableFields();
2717

28-
$queryString .= $this->buildWheres();
18+
$queryString .= $this->buildWheres($builder);
2919

3020
$queryString .= '(';
3121

@@ -42,10 +32,10 @@ public function buildWhereRawString()
4232

4333
}
4434

45-
public function buildParams()
35+
public function buildParams(Builder $builder)
4636
{
4737
for ($itr = 0; $itr < count($this->fields); $itr++) {
48-
$this->whereParams["_search$itr"] = '%' . $this->builder->query . '%';
38+
$this->whereParams["_search$itr"] = '%' . $builder->query . '%';
4939
}
5040

5141
return $this->whereParams;

src/Engines/Modes/LikeExpanded.php

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,19 @@
77

88
class LikeExpanded extends Mode
99
{
10-
protected $modelService;
1110

1211
protected $fields;
1312

14-
function __construct(Builder $builder)
13+
public function buildWhereRawString(Builder $builder)
1514
{
16-
parent::__construct($builder);
1715

18-
$this->modelService = resolve(ModelService::class);
19-
$this->modelService->setModel($this->builder->model);
20-
}
21-
22-
public function buildWhereRawString()
23-
{
2416
$queryString = '';
2517

26-
$this->fields = $this->modelService->getSearchableFields();
18+
$this->fields = $this->modelService->setModel($builder->model)->getSearchableFields();
2719

28-
$queryString .= $this->buildWheres();
20+
$queryString .= $this->buildWheres($builder);
2921

30-
$words = explode(' ', $this->builder->query);
22+
$words = explode(' ', $builder->query);
3123

3224
$queryString .= '(';
3325

@@ -47,9 +39,9 @@ public function buildWhereRawString()
4739

4840
}
4941

50-
public function buildParams()
42+
public function buildParams(Builder $builder)
5143
{
52-
$words = explode(' ', $this->builder->query);
44+
$words = explode(' ', $builder->query);
5345

5446
$itr = 0;
5547
for ($i = 0; $i < count($this->fields); $i++) {

src/Engines/Modes/Mode.php

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,32 @@
33
namespace DamianTW\MySQLScout\Engines\Modes;
44

55
use Laravel\Scout\Builder;
6+
use DamianTW\MySQLScout\Services\ModelService;
67

78
abstract class Mode
89
{
9-
protected $builder;
1010

1111
protected $whereParams = [];
1212

13-
function __construct(Builder $builder)
13+
protected $modelService;
14+
15+
function __construct()
1416
{
15-
$this->builder = $builder;
17+
$this->modelService = resolve(ModelService::class);
1618
}
1719

18-
abstract public function buildWhereRawString();
20+
abstract public function buildWhereRawString(Builder $builder);
1921

20-
abstract public function buildParams();
22+
abstract public function buildParams(Builder $builder);
2123

2224
abstract public function isFullText();
2325

24-
protected function buildWheres()
26+
protected function buildWheres(Builder $builder)
2527
{
2628

2729
$queryString = '';
2830

29-
$parsedWheres = $this->parseWheres($this->builder->wheres);
31+
$parsedWheres = $this->parseWheres($builder->wheres);
3032

3133
foreach ($parsedWheres as $parsedWhere) {
3234

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace DamianTW\MySQLScout\Engines\Modes;
4+
5+
6+
class ModeContainer
7+
{
8+
public $mode;
9+
10+
public $fallbackMode;
11+
12+
function __construct($mode, $fallbackMode)
13+
{
14+
$this->mode = $mode;
15+
$this->fallbackMode = $fallbackMode;
16+
}
17+
}

src/Engines/Modes/NaturalLanguage.php

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,17 @@
33
namespace DamianTW\MySQLScout\Engines\Modes;
44

55
use Laravel\Scout\Builder;
6-
use DamianTW\MySQLScout\Services\ModelService;
76

87
class NaturalLanguage extends Mode
98
{
10-
protected $modelService;
119

12-
function __construct(Builder $builder)
13-
{
14-
parent::__construct($builder);
15-
16-
$this->modelService = resolve(ModelService::class);
17-
$this->modelService->setModel($this->builder->model);
18-
}
19-
20-
public function buildWhereRawString()
10+
public function buildWhereRawString(Builder $builder)
2111
{
2212
$queryString = '';
2313

24-
$queryString .= $this->buildWheres();
14+
$queryString .= $this->buildWheres($builder);
2515

26-
$indexFields = implode(',', $this->modelService->getFullTextIndexFields());
16+
$indexFields = implode(',', $this->modelService->setModel($builder->model)->getFullTextIndexFields());
2717

2818
$queryString .= "MATCH($indexFields) AGAINST(:_search IN NATURAL LANGUAGE MODE";
2919

@@ -37,10 +27,10 @@ public function buildWhereRawString()
3727

3828
}
3929

40-
public function buildParams()
30+
public function buildParams(Builder $builder)
4131
{
4232

43-
$this->whereParams['_search'] = $this->builder->query;
33+
$this->whereParams['_search'] = $builder->query;
4434
return $this->whereParams;
4535
}
4636

src/Engines/MySQLEngine.php

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace DamianTW\MySQLScout\Engines;
44

5+
use DamianTW\MySQLScout\Engines\Modes\ModeContainer;
56
use Illuminate\Database\Eloquent\Collection;
67
use Laravel\Scout\Builder;
78
use Laravel\Scout\Engines\Engine;
@@ -11,19 +12,12 @@ class MySQLEngine extends Engine
1112

1213
protected $mode;
1314

14-
protected $builder;
15+
protected $fallbackMode;
1516

16-
public function setup(Builder $builder)
17+
function __construct(ModeContainer $modeContainer)
1718
{
18-
$this->builder = $builder;
19-
20-
$mode = __NAMESPACE__ . '\\Modes\\' . studly_case(strtolower(config('scout.mysql.mode')));
21-
$this->mode = new $mode($this->builder);
22-
23-
if($this->shouldUseFallback()) {
24-
$mode = __NAMESPACE__ . '\\Modes\\' . studly_case(strtolower(config('scout.mysql.min_fulltext_search_fallback')));
25-
$this->mode = new $mode($this->builder);
26-
}
19+
$this->mode = $modeContainer->mode;
20+
$this->fallbackMode = $modeContainer->fallbackMode;
2721
}
2822

2923
public function update($models)
@@ -48,30 +42,28 @@ public function search(Builder $builder)
4842

4943
$result = [];
5044

51-
$this->setup($builder);
52-
53-
if($this->shouldNotRun()) {
45+
if($this->shouldNotRun($builder)) {
5446
$result['results'] = Collection::make();
5547
$result['count'] = 0;
5648
return $result;
5749
}
5850

51+
$mode = $this->shouldUseFallback($builder) ? $this->fallbackMode : $this->mode;
5952

60-
$model = $this->builder->model;
61-
62-
$whereRawString = $this->mode->buildWhereRawString();
63-
$params = $this->mode->buildParams();
53+
$whereRawString = $mode->buildWhereRawString($builder);
54+
$params = $mode->buildParams($builder);
6455

56+
$model = $builder->model;
6557
$query = $model::whereRaw($whereRawString, $params);
6658

6759
$result['count'] = $query->count();
6860

69-
if($this->builder->limit) {
70-
$query = $query->take($this->builder->limit);
61+
if($builder->limit) {
62+
$query = $query->take($builder->limit);
7163
}
7264

73-
if(property_exists($this->builder, 'offset') && $this->builder->offset) {
74-
$query = $query->skip($this->builder->offset);
65+
if(property_exists($builder, 'offset') && $builder->offset) {
66+
$query = $query->skip($builder->offset);
7567
}
7668

7769
$result['results'] = $query->get();
@@ -121,15 +113,15 @@ public function getTotalCount($results)
121113
return $results['count'];
122114
}
123115

124-
protected function shouldNotRun()
116+
protected function shouldNotRun($builder)
125117
{
126-
return strlen($this->builder->query) < config('scout.mysql.min_search_length');
118+
return strlen($builder->query) < config('scout.mysql.min_search_length');
127119
}
128120

129-
protected function shouldUseFallback()
121+
protected function shouldUseFallback($builder)
130122
{
131123
return $this->mode->isFullText() &&
132-
strlen($this->builder->query) < config('scout.mysql.min_fulltext_search_length');
124+
strlen($builder->query) < config('scout.mysql.min_fulltext_search_length');
133125
}
134126

135127
}

src/Providers/MySQLScoutServiceProvider.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,12 @@
22

33
namespace DamianTW\MySQLScout\Providers;
44

5+
use DamianTW\MySQLScout\Engines\Modes\ModeContainer;
56
use Illuminate\Support\ServiceProvider;
6-
77
use Laravel\Scout\EngineManager;
8-
98
use DamianTW\MySQLScout\Engines\MySQLEngine;
10-
119
use DamianTW\MySQLScout\Services\ModelService;
12-
1310
use DamianTW\MySQLScout\Services\IndexService;
14-
1511
use DamianTW\MySQLScout\Commands\ManageIndexes;
1612

1713
class MySQLScoutServiceProvider extends ServiceProvider
@@ -29,8 +25,8 @@ public function boot()
2925
]);
3026
}
3127

32-
resolve(EngineManager::class)->extend('mysql', function () {
33-
return new MySQLEngine(resolve(IndexService::class));
28+
$this->app->make(EngineManager::class)->extend('mysql', function () {
29+
return new MySQLEngine(resolve(ModeContainer::class));
3430
});
3531
}
3632

@@ -48,5 +44,15 @@ public function register()
4844
$this->app->singleton(IndexService::class, function ($app) {
4945
return new IndexService($app->make(ModelService::class));
5046
});
47+
48+
$this->app->singleton(ModeContainer::class, function ($app) {
49+
$engineNamespace = 'DamianTW\\MySQLScout\\Engines\\Modes\\';
50+
$mode = $engineNamespace . studly_case(strtolower(config('scout.mysql.mode')));
51+
$fallbackMode = $engineNamespace . studly_case(strtolower(config('scout.mysql.min_fulltext_search_fallback')));
52+
return new ModeContainer(new $mode, new $fallbackMode);
53+
});
54+
55+
56+
5157
}
5258
}

src/Services/ModelService.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public function setModel($model)
2929

3030
$this->indexName = $modelInstance->searchableAs();
3131

32+
return $this;
33+
3234
}
3335

3436
public function getFullTextIndexFields()

0 commit comments

Comments
 (0)