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; ...@@ -11,12 +11,13 @@ use Grifart\ClassScaffolder\Definition\ClassDefinition;
*/ */
final class Definitions implements \IteratorAggregate final class Definitions implements \IteratorAggregate
{ {
private ?ClassDefinition $factoryClass = null;
private function __construct( private function __construct(
private ClassDefinition $rowClass, private ClassDefinition $rowClass,
private ClassDefinition $modificationsClass, private ClassDefinition $modificationsClass,
private ?ClassDefinition $primaryKeyClass, private ?ClassDefinition $primaryKeyClass,
private ClassDefinition $tableClass, private ClassDefinition $tableClass,
private ?ClassDefinition $factoryClass,
) {} ) {}
public static function from( public static function from(
...@@ -24,7 +25,6 @@ final class Definitions implements \IteratorAggregate ...@@ -24,7 +25,6 @@ final class Definitions implements \IteratorAggregate
ClassDefinition $modificationsClass, ClassDefinition $modificationsClass,
ClassDefinition $primaryKeyClass, ClassDefinition $primaryKeyClass,
ClassDefinition $tableClass, ClassDefinition $tableClass,
ClassDefinition $factoryClass,
): self ): self
{ {
return new self( return new self(
...@@ -32,7 +32,6 @@ final class Definitions implements \IteratorAggregate ...@@ -32,7 +32,6 @@ final class Definitions implements \IteratorAggregate
$modificationsClass, $modificationsClass,
$primaryKeyClass, $primaryKeyClass,
$tableClass, $tableClass,
$factoryClass,
); );
} }
...@@ -66,19 +65,13 @@ final class Definitions implements \IteratorAggregate ...@@ -66,19 +65,13 @@ final class Definitions implements \IteratorAggregate
return $this; return $this;
} }
public function factoryClassWith(Capability $capability, Capability ...$capabilities): self public function withFactory(): self
{
$this->factoryClass = $this->factoryClass?->with($capability, ...$capabilities);
return $this;
}
public function withoutFactory(): self
{ {
$this->factoryClass = null; $tableClassName = $this->tableClass->getFullyQualifiedName();
$this->factoryClass = (new ClassDefinition($tableClassName . 'Factory'))->with(new TableFactoryImplementation($tableClassName));
return $this; return $this;
} }
public function getIterator(): \Traversable public function getIterator(): \Traversable
{ {
yield $this->rowClass; yield $this->rowClass;
......
...@@ -100,9 +100,6 @@ final class TablesDefinitions ...@@ -100,9 +100,6 @@ final class TablesDefinitions
$columnPhpTypes, $columnPhpTypes,
)); ));
$factoryClass = (new ClassDefinition($tableClassName . 'Factory')) return Definitions::from($rowClass, $modificationsClass, $primaryKeyClass, $tableClass);
->with(new TableFactoryImplementation($tableClassName));
return Definitions::from($rowClass, $modificationsClass, $primaryKeyClass, $tableClass, $factoryClass);
} }
} }
...@@ -23,7 +23,7 @@ return [ ...@@ -23,7 +23,7 @@ return [
TestModifications::class, TestModifications::class,
TestsTable::class, TestsTable::class,
TestPrimaryKey::class, TestPrimaryKey::class,
), )->withFactory(),
...$tableDefinitions->for( ...$tableDefinitions->for(
'public', 'public',
'config', '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( ...@@ -34,5 +34,5 @@ $results = $fileProcessor->processFile(
}, },
); );
Assert::count(20, $results->getDefinitions()); Assert::count(17, $results->getDefinitions());
Assert::true($results->isSuccessful()); 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