Skip to content

Commit 81440d7

Browse files
authored
fix: phpstan errors, refactoring (#119)
1 parent aa9b721 commit 81440d7

File tree

15 files changed

+196
-47
lines changed

15 files changed

+196
-47
lines changed

src/Bridge/Laravel/Console/Commands/Database/ListCommand.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ private function renderTables(Table $grid, array $header, Database $database): v
125125
$header = ['', '', '', '', ''];
126126
}
127127

128-
$header[1] && $grid->addRow(array_merge($header, ['no tables', 'no records']));
128+
if (isset($header[1])) {
129+
$grid->addRow(array_merge($header, ['no tables', 'no records']));
130+
}
129131
}
130132
}

src/Bridge/Laravel/Console/Commands/Database/TableCommand.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,11 @@ public function handle(DatabaseProviderInterface $dbal): int
7070
$this->line($message);
7171
$this->describeColumns($schema);
7272

73-
if (! empty($indexes = $schema->getIndexes())) {
73+
if ([] !== ($indexes = $schema->getIndexes())) {
7474
$this->describeIndexes($database, $indexes, $tableName);
7575
}
7676

77-
if (! empty($foreignKeys = $schema->getForeignKeys())) {
77+
if ([] !== ($foreignKeys = $schema->getForeignKeys())) {
7878
$this->describeForeignKeys($database, $foreignKeys, $tableName);
7979
}
8080

@@ -198,7 +198,7 @@ private function describeForeignKeys(DatabaseInterface $database, array $foreign
198198
$foreignTable->render();
199199
}
200200

201-
private function describeDefaultValue(AbstractColumn $column, DriverInterface $driver): float|DateTimeInterface|bool|int|string|FragmentInterface|null
201+
private function describeDefaultValue(AbstractColumn $column, DriverInterface $driver): mixed
202202
{
203203
/** @var FragmentInterface|DateTimeInterface|scalar|null $defaultValue */
204204
$defaultValue = $column->getDefaultValue();
@@ -222,7 +222,7 @@ private function describeType(AbstractColumn $column): string
222222

223223
$abstractType = $column->getAbstractType();
224224

225-
if ($column->getSize()) {
225+
if ($column->getSize() > 0) {
226226
$type .= " ({$column->getSize()})";
227227
}
228228

@@ -237,7 +237,7 @@ private function describeAbstractType(AbstractColumn $column): string
237237
{
238238
$abstractType = $column->getAbstractType();
239239

240-
if (in_array($abstractType, ['primary', 'bigPrimary'])) {
240+
if (in_array($abstractType, ['primary', 'bigPrimary'], true)) {
241241
$abstractType = "<fg=magenta>{$abstractType}</fg=magenta>";
242242
}
243243

src/Bridge/Laravel/Console/Commands/Migrations/MigrateCommand.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function handle(): int
3232
$found = false;
3333
$count = $this->option('one') ? 1 : PHP_INT_MAX;
3434

35-
while (0 < $count && ($migration = $this->migrator->run())) {
35+
while (0 < $count && null !== ($migration = $this->migrator->run())) {
3636
$found = true;
3737
--$count;
3838

src/Bridge/Laravel/Console/Commands/ORM/Generators/ShowChanges.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public function run(Registry $registry): Registry
5656
}
5757

5858
foreach ($this->changes as $change) {
59-
$this->output->writeLn(sprintf('• <fg=cyan>%s.%s</fg=cyan>', $change['database'], $change['table']));
59+
$this->output->writeln(sprintf('• <fg=cyan>%s.%s</fg=cyan>', $change['database'], $change['table']));
6060
$this->describeChanges($change['schema']);
6161
}
6262

+141
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace WayOfDev\Cycle\Bridge\Laravel\Factories;
6+
7+
use Illuminate\Database\Eloquent\Factories\Factory as EloquentFactory;
8+
use Illuminate\Database\Eloquent\Model;
9+
use Illuminate\Support\Collection;
10+
use Illuminate\Support\Enumerable;
11+
12+
use function array_map;
13+
use function method_exists;
14+
use function range;
15+
16+
abstract class Factory extends EloquentFactory
17+
{
18+
public static function factoryForEntity(string $modelName): EloquentFactory
19+
{
20+
/** @var EloquentFactory $factory */
21+
$factory = static::resolveFactoryName($modelName);
22+
23+
return $factory::new();
24+
}
25+
26+
/**
27+
* Get the factory name for the given model name.
28+
*/
29+
public static function resolveFactoryName(string $modelName): string
30+
{
31+
if (method_exists($modelName, 'resolveFactoryName')) {
32+
return $modelName::resolveFactoryName();
33+
}
34+
35+
return parent::resolveFactoryName($modelName);
36+
}
37+
38+
/**
39+
* Create a collection of models and persist them to the database.
40+
*
41+
* @param mixed $attributes
42+
*/
43+
public function create($attributes = [], ?Model $parent = null)
44+
{
45+
if ([] !== $attributes) {
46+
return $this->state($attributes)->create([], $parent);
47+
}
48+
49+
$results = $this->make($attributes, $parent);
50+
51+
if ($results instanceof Model) {
52+
$this->store(collect([$results]));
53+
54+
$this->callAfterCreating(collect([$results]), $parent);
55+
} else {
56+
$this->store($results);
57+
58+
$this->callAfterCreating($results, $parent);
59+
}
60+
61+
return $results;
62+
}
63+
64+
/**
65+
* Create a collection of models and persist them to the database.
66+
*/
67+
public function createMany(iterable $records): Collection
68+
{
69+
return new Collection(
70+
collect($records)->map(function ($record) {
71+
return $this->state($record)->create();
72+
})
73+
);
74+
}
75+
76+
/**
77+
* Create a collection of models.
78+
*
79+
* @param mixed $attributes
80+
*/
81+
public function make($attributes = [], ?Model $parent = null)
82+
{
83+
if ([] !== $attributes) {
84+
return $this->state($attributes)->make([], $parent);
85+
}
86+
87+
if (null === $this->count) {
88+
return tap($this->makeInstance($parent), function ($instance): void {
89+
$this->callAfterMaking(collect([$instance]));
90+
});
91+
}
92+
93+
if (1 > $this->count) {
94+
return $this->newModel()->newCollection();
95+
}
96+
97+
$instances = $this->newModel()->newCollection(array_map(function () use ($parent) {
98+
return $this->makeInstance($parent);
99+
}, range(1, $this->count)));
100+
101+
$this->callAfterMaking($instances);
102+
103+
return $instances;
104+
}
105+
106+
/**
107+
* Set the connection name on the results and store them.
108+
*/
109+
protected function store(Collection $results): void
110+
{
111+
$results->each(function ($model): void {
112+
if (! isset($this->connection)) {
113+
$model->setConnection($model->newQueryWithoutScopes()->getConnection()->getName());
114+
}
115+
116+
$model->save();
117+
118+
foreach ($model->getRelations() as $name => $items) {
119+
if ($items instanceof Enumerable && $items->isEmpty()) {
120+
$model->unsetRelation($name);
121+
}
122+
}
123+
124+
$this->createChildren($model);
125+
});
126+
}
127+
128+
/**
129+
* Make an instance of the model with the given attributes.
130+
*/
131+
protected function makeInstance(?Model $parent)
132+
{
133+
return Model::unguarded(function () use ($parent) {
134+
return tap($this->newModel($this->getExpandedAttributes($parent)), function ($instance): void {
135+
if (isset($this->connection)) {
136+
$instance->setConnection($this->connection);
137+
}
138+
});
139+
});
140+
}
141+
}

src/Bridge/Laravel/Providers/Registrators/RegisterAnnotated.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace WayOfDev\Cycle\Bridge\Laravel\Providers\Registrators;
66

77
use Cycle\Annotated;
8-
use Illuminate\Container\Container;
8+
use Illuminate\Contracts\Foundation\Application;
99
use Spiral\Attributes\Factory;
1010
use Spiral\Attributes\ReaderInterface;
1111
use Spiral\Tokenizer\ClassesInterface;
@@ -15,7 +15,7 @@
1515
*/
1616
final class RegisterAnnotated
1717
{
18-
public function __invoke(Container $app): void
18+
public function __invoke(Application $app): void
1919
{
2020
$app->bind(ReaderInterface::class, function () {
2121
return (new Factory())->create();

src/Bridge/Laravel/Providers/Registrators/RegisterClassesInterface.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace WayOfDev\Cycle\Bridge\Laravel\Providers\Registrators;
66

7-
use Illuminate\Container\Container;
7+
use Illuminate\Contracts\Foundation\Application;
88
use Spiral\Tokenizer\ClassesInterface;
99
use Spiral\Tokenizer\ClassLocator;
1010
use Spiral\Tokenizer\Config\TokenizerConfig;
@@ -19,9 +19,9 @@
1919
*/
2020
final class RegisterClassesInterface
2121
{
22-
public function __invoke(Container $app): void
22+
public function __invoke(Application $app): void
2323
{
24-
$app->singleton(Tokenizer::class, static function (Container $app): Tokenizer {
24+
$app->singleton(Tokenizer::class, static function (Application $app): Tokenizer {
2525
return new Tokenizer($app[TokenizerConfig::class]);
2626
});
2727

src/Bridge/Laravel/Providers/Registrators/RegisterConfigs.php

+12-12
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
use Cycle\Migrations\Config\MigrationConfig;
99
use Cycle\ORM\Config\RelationConfig;
1010
use Illuminate\Contracts\Config\Repository as IlluminateConfig;
11-
use Illuminate\Contracts\Container\Container;
11+
use Illuminate\Contracts\Foundation\Application;
1212
use Spiral\Tokenizer\Config\TokenizerConfig;
1313
use WayOfDev\Cycle\Bridge\Laravel\Providers\Registrator;
1414
use WayOfDev\Cycle\Schema\Config\SchemaConfig;
1515

1616
final class RegisterConfigs
1717
{
18-
public function __invoke(Container $app): void
18+
public function __invoke(Application $app): void
1919
{
2020
$this->registerDatabaseConfig($app);
2121
$this->registerMigrationConfig($app);
@@ -24,9 +24,9 @@ public function __invoke(Container $app): void
2424
$this->registerRelationConfig($app);
2525
}
2626

27-
private function registerDatabaseConfig(Container $app): void
27+
private function registerDatabaseConfig(Application $app): void
2828
{
29-
$app->singleton(DatabaseConfig::class, static function (Container $app): DatabaseConfig {
29+
$app->singleton(DatabaseConfig::class, static function (Application $app): DatabaseConfig {
3030
/** @var IlluminateConfig $config */
3131
$config = $app->get(IlluminateConfig::class);
3232

@@ -36,39 +36,39 @@ private function registerDatabaseConfig(Container $app): void
3636
});
3737
}
3838

39-
private function registerMigrationConfig(Container $app): void
39+
private function registerMigrationConfig(Application $app): void
4040
{
41-
$app->singleton(MigrationConfig::class, static function (Container $app): MigrationConfig {
41+
$app->singleton(MigrationConfig::class, static function (Application $app): MigrationConfig {
4242
/** @var IlluminateConfig $config */
4343
$config = $app->get(IlluminateConfig::class);
4444

4545
return new MigrationConfig($config->get(Registrator::CFG_KEY_MIGRATIONS));
4646
});
4747
}
4848

49-
private function registerTokenizerConfig(Container $app): void
49+
private function registerTokenizerConfig(Application $app): void
5050
{
51-
$app->singleton(TokenizerConfig::class, static function (Container $app): TokenizerConfig {
51+
$app->singleton(TokenizerConfig::class, static function (Application $app): TokenizerConfig {
5252
/** @var IlluminateConfig $config */
5353
$config = $app->get(IlluminateConfig::class);
5454

5555
return new TokenizerConfig($config->get(Registrator::CFG_KEY_TOKENIZER));
5656
});
5757
}
5858

59-
private function registerSchemaConfig(Container $app): void
59+
private function registerSchemaConfig(Application $app): void
6060
{
61-
$app->singleton(SchemaConfig::class, static function (Container $app): SchemaConfig {
61+
$app->singleton(SchemaConfig::class, static function (Application $app): SchemaConfig {
6262
/** @var IlluminateConfig $config */
6363
$config = $app->get(IlluminateConfig::class);
6464

6565
return new SchemaConfig($config->get(Registrator::CFG_KEY_SCHEMA));
6666
});
6767
}
6868

69-
private function registerRelationConfig(Container $app): void
69+
private function registerRelationConfig(Application $app): void
7070
{
71-
$app->singleton(RelationConfig::class, static function (Container $app): RelationConfig {
71+
$app->singleton(RelationConfig::class, static function (Application $app): RelationConfig {
7272
/** @var IlluminateConfig $config */
7373
$config = $app->get(IlluminateConfig::class);
7474
$relations = RelationConfig::getDefault()->toArray() + $config->get(Registrator::CFG_KEY_RELATIONS);

src/Bridge/Laravel/Providers/Registrators/RegisterDatabase.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@
88
use Cycle\Database\DatabaseInterface;
99
use Cycle\Database\DatabaseManager;
1010
use Cycle\Database\DatabaseProviderInterface;
11-
use Illuminate\Container\Container;
11+
use Illuminate\Contracts\Foundation\Application;
1212

1313
/**
1414
* @see https://github.com/spiral/cycle-bridge/blob/2.0/src/Bootloader/DatabaseBootloader.php
1515
*/
1616
final class RegisterDatabase
1717
{
18-
public function __invoke(Container $app): void
18+
public function __invoke(Application $app): void
1919
{
20-
$app->singleton(DatabaseProviderInterface::class, static function (Container $app): DatabaseProviderInterface {
20+
$app->singleton(DatabaseProviderInterface::class, static function (Application $app): DatabaseProviderInterface {
2121
return new DatabaseManager(
2222
config: $app->get(DatabaseConfig::class),
2323
loggerFactory: null
2424
);
2525
});
2626

27-
$app->bind(DatabaseInterface::class, static function (Container $app): DatabaseInterface {
27+
$app->bind(DatabaseInterface::class, static function (Application $app): DatabaseInterface {
2828
return $app->get(DatabaseProviderInterface::class)->database();
2929
});
3030

src/Bridge/Laravel/Providers/Registrators/RegisterMigrations.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,24 @@
99
use Cycle\Migrations\FileRepository;
1010
use Cycle\Migrations\Migrator;
1111
use Cycle\Migrations\RepositoryInterface;
12-
use Illuminate\Container\Container;
12+
use Illuminate\Contracts\Foundation\Application;
1313

1414
/**
1515
* @see https://github.com/spiral/cycle-bridge/blob/2.0/src/Bootloader/MigrationsBootloader.php
1616
*/
1717
final class RegisterMigrations
1818
{
19-
public function __invoke(Container $app): void
19+
public function __invoke(Application $app): void
2020
{
21-
$app->singleton(RepositoryInterface::class, static function (Container $app): RepositoryInterface {
21+
$app->singleton(RepositoryInterface::class, static function (Application $app): RepositoryInterface {
2222
$config = $app->get(MigrationConfig::class);
2323

2424
return new FileRepository(
2525
config: $config
2626
);
2727
});
2828

29-
$app->singleton(Migrator::class, static function (Container $app): Migrator {
29+
$app->singleton(Migrator::class, static function (Application $app): Migrator {
3030
return new Migrator(
3131
config: $app->get(MigrationConfig::class),
3232
dbal: $app->get(DatabaseProviderInterface::class),

0 commit comments

Comments
 (0)