Skip to content

Commit 3b69716

Browse files
committed
Laravel version compatibility redo
Collapsed the Laravel version compatibility layer from 12 files (4 dispatchers + 4 v11 traits + 4 v12 traits) into 4 self-contained traits. Eliminated file-level conditional trait loading — version checks now happen inside each method, using spread operators to handle different constructor signatures across Laravel versions. Removed the phpstan bootstrap class_alias hacks that were needed to make the old pattern analysable.
1 parent 38224ce commit 3b69716

14 files changed

Lines changed: 82 additions & 229 deletions

composer.lock

Lines changed: 12 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

phpstan-bootstrap.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,3 @@
11
<?php
22

33
require_once __DIR__.'/vendor/autoload.php';
4-
5-
class_alias('PDPhilip\\Elasticsearch\\Laravel\\v11\\Connection\\ConnectionCompatibility', 'PDPhilip\\Elasticsearch\\Laravel\\Compatibility\\Connection\\ConnectionCompatibility');
6-
class_alias('PDPhilip\\Elasticsearch\\Laravel\\v11\\Schema\\BlueprintCompatibility', 'PDPhilip\\Elasticsearch\\Laravel\\Compatibility\\Schema\\BlueprintCompatibility');
7-
class_alias('PDPhilip\\Elasticsearch\\Laravel\\v11\\Schema\\BuilderCompatibility', 'PDPhilip\\Elasticsearch\\Laravel\\Compatibility\\Schema\\BuilderCompatibility');
8-
class_alias('PDPhilip\\Elasticsearch\\Laravel\\v11\\Schema\\GrammarCompatibility', 'PDPhilip\\Elasticsearch\\Laravel\\Compatibility\\Schema\\GrammarCompatibility');

src/Laravel/Compatibility/Connection/ConnectionCompatibility.php

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,35 @@
22

33
namespace PDPhilip\Elasticsearch\Laravel\Compatibility\Connection;
44

5-
use PDPhilip\Elasticsearch\Laravel\v11\Connection\ConnectionCompatibility as ConnectionCompatibility11;
6-
use PDPhilip\Elasticsearch\Laravel\v12\Connection\ConnectionCompatibility as ConnectionCompatibility12;
5+
use PDPhilip\Elasticsearch\Query;
6+
use PDPhilip\Elasticsearch\Schema;
77
use PDPhilip\Elasticsearch\Utils\Helpers;
88

9-
$laravelVersion = Helpers::getLaravelCompatabilityVersion();
9+
trait ConnectionCompatibility
10+
{
11+
/**
12+
* @return Schema\Grammars\Grammar
13+
*/
14+
public function getSchemaGrammar()
15+
{
16+
return new Schema\Grammars\Grammar(...$this->grammarArgs());
17+
}
18+
19+
/** {@inheritdoc} */
20+
protected function getDefaultQueryGrammar(): Query\Grammar\Grammar
21+
{
22+
return new Query\Grammar\Grammar(...$this->grammarArgs());
23+
}
1024

11-
if ($laravelVersion >= 12) {
12-
trait ConnectionCompatibility
25+
/** {@inheritdoc} */
26+
protected function getDefaultSchemaGrammar(): Schema\Grammars\Grammar
1327
{
14-
use ConnectionCompatibility12;
28+
return new Schema\Grammars\Grammar(...$this->grammarArgs());
1529
}
16-
} else {
17-
trait ConnectionCompatibility
30+
31+
/** @phpstan-ignore return.type */
32+
private function grammarArgs(): array
1833
{
19-
use ConnectionCompatibility11;
34+
return Helpers::getLaravelCompatabilityVersion() >= 12 ? [$this] : [];
2035
}
2136
}

src/Laravel/Compatibility/Schema/BlueprintCompatibility.php

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,29 @@
22

33
namespace PDPhilip\Elasticsearch\Laravel\Compatibility\Schema;
44

5-
use PDPhilip\Elasticsearch\Laravel\v11\Schema\BlueprintCompatibility as BlueprintCompatibility11;
6-
use PDPhilip\Elasticsearch\Laravel\v12\Schema\BlueprintCompatibility as BlueprintCompatibility12;
75
use PDPhilip\Elasticsearch\Utils\Helpers;
86

9-
$laravelVersion = Helpers::getLaravelCompatabilityVersion();
10-
11-
if ($laravelVersion >= 12) {
12-
trait BlueprintCompatibility
7+
trait BlueprintCompatibility
8+
{
9+
public function getConnection()
1310
{
14-
use BlueprintCompatibility12;
11+
return $this->connection ?? null;
1512
}
16-
} else {
17-
trait BlueprintCompatibility
13+
14+
/** @phpstan-ignore method.childParameterType */
15+
public function build($connection = null, $grammar = null): void
1816
{
19-
use BlueprintCompatibility11;
17+
if (Helpers::getLaravelCompatabilityVersion() >= 12) {
18+
$connection = $this->connection;
19+
$grammar = $this->grammar;
20+
}
21+
22+
foreach ($this->toDSL($connection, $grammar) as $statement) {
23+
if ($connection->pretending()) {
24+
return;
25+
}
26+
27+
$statement($this, $connection);
28+
}
2029
}
2130
}

src/Laravel/Compatibility/Schema/BuilderCompatibility.php

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,29 @@
22

33
namespace PDPhilip\Elasticsearch\Laravel\Compatibility\Schema;
44

5-
use PDPhilip\Elasticsearch\Laravel\v11\Schema\BuilderCompatibility as BuilderCompatibility11;
6-
use PDPhilip\Elasticsearch\Laravel\v12\Schema\BuilderCompatibility as BuilderCompatibility12;
5+
use Closure;
6+
use PDPhilip\Elasticsearch\Schema\Blueprint;
77
use PDPhilip\Elasticsearch\Utils\Helpers;
88

9-
$laravelVersion = Helpers::getLaravelCompatabilityVersion();
9+
trait BuilderCompatibility
10+
{
11+
/** {@inheritDoc} */
12+
protected function createBlueprint($table, ?Closure $callback = null): Blueprint
13+
{
14+
return new Blueprint(...$this->blueprintArgs($table, $callback));
15+
}
1016

11-
if ($laravelVersion >= 12) {
12-
trait BuilderCompatibility
17+
public function getTableListing($schema = null, $schemaQualified = true)
1318
{
14-
use BuilderCompatibility12;
19+
return array_column($this->getTables(), 'name');
1520
}
16-
} else {
17-
trait BuilderCompatibility
21+
22+
private function blueprintArgs(string $table, ?Closure $callback): array
1823
{
19-
use BuilderCompatibility11;
24+
if (Helpers::getLaravelCompatabilityVersion() >= 12) {
25+
return [$this->connection, $table, $callback];
26+
}
27+
28+
return [$table, $callback];
2029
}
2130
}

src/Laravel/Compatibility/Schema/GrammarCompatibility.php

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,17 @@
22

33
namespace PDPhilip\Elasticsearch\Laravel\Compatibility\Schema;
44

5-
use PDPhilip\Elasticsearch\Laravel\v11\Schema\GrammarCompatibility as GrammarCompatibility11;
6-
use PDPhilip\Elasticsearch\Laravel\v12\Schema\GrammarCompatibility as GrammarCompatibility12;
5+
use PDPhilip\Elasticsearch\Schema\Blueprint;
76
use PDPhilip\Elasticsearch\Utils\Helpers;
87

9-
$laravelVersion = Helpers::getLaravelCompatabilityVersion();
10-
11-
if ($laravelVersion >= 12) {
12-
trait GrammarCompatibility
13-
{
14-
use GrammarCompatibility12;
15-
}
16-
} else {
17-
trait GrammarCompatibility
8+
trait GrammarCompatibility
9+
{
10+
private function createBlueprint(Blueprint $blueprint): Blueprint
1811
{
19-
use GrammarCompatibility11;
12+
if (Helpers::getLaravelCompatabilityVersion() >= 12) {
13+
return new Blueprint($blueprint->getConnection(), '');
14+
}
15+
16+
return new Blueprint(''); // @phpstan-ignore arguments.count
2017
}
2118
}

src/Laravel/v11/Connection/ConnectionCompatibility.php

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/Laravel/v11/Schema/BlueprintCompatibility.php

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/Laravel/v11/Schema/BuilderCompatibility.php

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/Laravel/v11/Schema/GrammarCompatibility.php

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)