From 80f3531d59b2e7d3abbe4dda884b89aa72aefd06 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Pudil?= <me@jiripudil.cz>
Date: Thu, 20 Feb 2025 15:35:01 +0100
Subject: [PATCH] make factory generation opt-in instead of opt-out

---
 src/Scaffolding/Definitions.php          | 17 +++-------
 src/Scaffolding/TablesDefinitions.php    |  5 +--
 tests/Fixtures/.definition.php           |  2 +-
 tests/Fixtures/ConfigTableFactory.php    | 42 ------------------------
 tests/Fixtures/GeneratedTableFactory.php | 42 ------------------------
 tests/Fixtures/PackagesTableFactory.php  | 42 ------------------------
 tests/Scaffolding/ScaffoldingTest.phpt   |  2 +-
 7 files changed, 8 insertions(+), 144 deletions(-)
 delete mode 100644 tests/Fixtures/ConfigTableFactory.php
 delete mode 100644 tests/Fixtures/GeneratedTableFactory.php
 delete mode 100644 tests/Fixtures/PackagesTableFactory.php

diff --git a/src/Scaffolding/Definitions.php b/src/Scaffolding/Definitions.php
index 35f5239..04f5efe 100644
--- a/src/Scaffolding/Definitions.php
+++ b/src/Scaffolding/Definitions.php
@@ -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;
diff --git a/src/Scaffolding/TablesDefinitions.php b/src/Scaffolding/TablesDefinitions.php
index 805ac51..8f6a1b1 100644
--- a/src/Scaffolding/TablesDefinitions.php
+++ b/src/Scaffolding/TablesDefinitions.php
@@ -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);
 	}
 }
diff --git a/tests/Fixtures/.definition.php b/tests/Fixtures/.definition.php
index 7f6dc2a..155eba0 100644
--- a/tests/Fixtures/.definition.php
+++ b/tests/Fixtures/.definition.php
@@ -23,7 +23,7 @@ return [
 		TestModifications::class,
 		TestsTable::class,
 		TestPrimaryKey::class,
-	),
+	)->withFactory(),
 	...$tableDefinitions->for(
 		'public',
 		'config',
diff --git a/tests/Fixtures/ConfigTableFactory.php b/tests/Fixtures/ConfigTableFactory.php
deleted file mode 100644
index de03067..0000000
--- a/tests/Fixtures/ConfigTableFactory.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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);
-	}
-}
diff --git a/tests/Fixtures/GeneratedTableFactory.php b/tests/Fixtures/GeneratedTableFactory.php
deleted file mode 100644
index ac9413d..0000000
--- a/tests/Fixtures/GeneratedTableFactory.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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);
-	}
-}
diff --git a/tests/Fixtures/PackagesTableFactory.php b/tests/Fixtures/PackagesTableFactory.php
deleted file mode 100644
index 72bfcce..0000000
--- a/tests/Fixtures/PackagesTableFactory.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?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);
-	}
-}
diff --git a/tests/Scaffolding/ScaffoldingTest.phpt b/tests/Scaffolding/ScaffoldingTest.phpt
index a956c07..c484dcb 100644
--- a/tests/Scaffolding/ScaffoldingTest.phpt
+++ b/tests/Scaffolding/ScaffoldingTest.phpt
@@ -34,5 +34,5 @@ $results = $fileProcessor->processFile(
 	},
 );
 
-Assert::count(20, $results->getDefinitions());
+Assert::count(17, $results->getDefinitions());
 Assert::true($results->isSuccessful());
-- 
GitLab