Skip to content
Snippets Groups Projects
Verified Commit 80f3531d authored by Jiří Pudil's avatar Jiří Pudil
Browse files

make factory generation opt-in instead of opt-out

parent 2bde7d59
No related branches found
No related tags found
1 merge request!59Make TableManager/Connection more customizable
Pipeline #59194 passed
......@@ -11,12 +11,13 @@ use Grifart\ClassScaffolder\Definition\ClassDefinition;
*/
final class Definitions implements \IteratorAggregate
{
private ?ClassDefinition $factoryClass = null;
private function __construct(
private ClassDefinition $rowClass,
private ClassDefinition $modificationsClass,
private ?ClassDefinition $primaryKeyClass,
private ClassDefinition $tableClass,
private ?ClassDefinition $factoryClass,
) {}
public static function from(
......@@ -24,7 +25,6 @@ final class Definitions implements \IteratorAggregate
ClassDefinition $modificationsClass,
ClassDefinition $primaryKeyClass,
ClassDefinition $tableClass,
ClassDefinition $factoryClass,
): self
{
return new self(
......@@ -32,7 +32,6 @@ final class Definitions implements \IteratorAggregate
$modificationsClass,
$primaryKeyClass,
$tableClass,
$factoryClass,
);
}
......@@ -66,19 +65,13 @@ final class Definitions implements \IteratorAggregate
return $this;
}
public function factoryClassWith(Capability $capability, Capability ...$capabilities): self
{
$this->factoryClass = $this->factoryClass?->with($capability, ...$capabilities);
return $this;
}
public function withoutFactory(): self
public function withFactory(): self
{
$this->factoryClass = null;
$tableClassName = $this->tableClass->getFullyQualifiedName();
$this->factoryClass = (new ClassDefinition($tableClassName . 'Factory'))->with(new TableFactoryImplementation($tableClassName));
return $this;
}
public function getIterator(): \Traversable
{
yield $this->rowClass;
......
......@@ -100,9 +100,6 @@ final class TablesDefinitions
$columnPhpTypes,
));
$factoryClass = (new ClassDefinition($tableClassName . 'Factory'))
->with(new TableFactoryImplementation($tableClassName));
return Definitions::from($rowClass, $modificationsClass, $primaryKeyClass, $tableClass, $factoryClass);
return Definitions::from($rowClass, $modificationsClass, $primaryKeyClass, $tableClass);
}
}
......@@ -23,7 +23,7 @@ return [
TestModifications::class,
TestsTable::class,
TestPrimaryKey::class,
),
)->withFactory(),
...$tableDefinitions->for(
'public',
'config',
......
<?php
/**
* Do not edit. This is generated file. Modify definition file instead.
*/
declare(strict_types=1);
namespace Grifart\Tables\Tests\Fixtures;
use Dibi\IConnection;
use Grifart\Tables\SingleConnectionTableManager;
use Grifart\Tables\TableManager;
use Grifart\Tables\TypeResolver;
final readonly class ConfigTableFactory implements \Grifart\Tables\TableFactory
{
public function __construct(
private TableManager $tableManager,
private TypeResolver $typeResolver,
) {
}
public function create(): ConfigTable
{
return new ConfigTable($this->tableManager, $this->typeResolver);
}
public function withTableManager(TableManager $tableManager): ConfigTable
{
return new ConfigTable($tableManager, $this->typeResolver);
}
public function withConnection(IConnection $connection): ConfigTable
{
$tableManager = new SingleConnectionTableManager($connection);
return new ConfigTable($tableManager, $this->typeResolver);
}
}
<?php
/**
* Do not edit. This is generated file. Modify definition file instead.
*/
declare(strict_types=1);
namespace Grifart\Tables\Tests\Fixtures;
use Dibi\IConnection;
use Grifart\Tables\SingleConnectionTableManager;
use Grifart\Tables\TableManager;
use Grifart\Tables\TypeResolver;
final readonly class GeneratedTableFactory implements \Grifart\Tables\TableFactory
{
public function __construct(
private TableManager $tableManager,
private TypeResolver $typeResolver,
) {
}
public function create(): GeneratedTable
{
return new GeneratedTable($this->tableManager, $this->typeResolver);
}
public function withTableManager(TableManager $tableManager): GeneratedTable
{
return new GeneratedTable($tableManager, $this->typeResolver);
}
public function withConnection(IConnection $connection): GeneratedTable
{
$tableManager = new SingleConnectionTableManager($connection);
return new GeneratedTable($tableManager, $this->typeResolver);
}
}
<?php
/**
* Do not edit. This is generated file. Modify definition file instead.
*/
declare(strict_types=1);
namespace Grifart\Tables\Tests\Fixtures;
use Dibi\IConnection;
use Grifart\Tables\SingleConnectionTableManager;
use Grifart\Tables\TableManager;
use Grifart\Tables\TypeResolver;
final readonly class PackagesTableFactory implements \Grifart\Tables\TableFactory
{
public function __construct(
private TableManager $tableManager,
private TypeResolver $typeResolver,
) {
}
public function create(): PackagesTable
{
return new PackagesTable($this->tableManager, $this->typeResolver);
}
public function withTableManager(TableManager $tableManager): PackagesTable
{
return new PackagesTable($tableManager, $this->typeResolver);
}
public function withConnection(IConnection $connection): PackagesTable
{
$tableManager = new SingleConnectionTableManager($connection);
return new PackagesTable($tableManager, $this->typeResolver);
}
}
......@@ -34,5 +34,5 @@ $results = $fileProcessor->processFile(
},
);
Assert::count(20, $results->getDefinitions());
Assert::count(17, $results->getDefinitions());
Assert::true($results->isSuccessful());
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment