diff --git a/src/DAO/GenericDAO.php b/src/DAO/GenericDAO.php index 21bf422..04fb118 100644 --- a/src/DAO/GenericDAO.php +++ b/src/DAO/GenericDAO.php @@ -1,7 +1,7 @@ scriptCreation($this->type, true); - if ($create == false) { - return $script; - } else { - // TODO extract to method - try { - $dbh = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )); - $dbh->exec($script);// or die(print_r($dbh->errorInfo(), true)); - } catch (PDOException $e) { - echo ("DB ERROR: ". $e->getMessage()); - } + return $script; + } + + public function criaBancoDeDados(IDatabaseCreator $creator) + { + $script = $this->geraScriptDeCriacaoDoBancoDeDados($creator); + try { + $dbh = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )); + $dbh->exec($script); + } catch (PDOException $e) { + echo ("DB ERROR: ". $e->getMessage()); } } } diff --git a/src/DAO/IGenericDAO.php b/src/DAO/IGenericDAO.php index 44d6cb7..f8cbce4 100644 --- a/src/DAO/IGenericDAO.php +++ b/src/DAO/IGenericDAO.php @@ -44,8 +44,12 @@ public function insert(EntidadeBase $entidade); public function update(EntidadeBase $entidade); /** - * Gera script de criação do banco de dados e permite a criação automatica. - * @param bolean $create True to create database automatically | False To print script in screen + * Retorna script de criação do banco de dados. */ - public function generate(IDataBaseCreator $creator, $create = false); + public function geraScriptDeCriacaoDoBancoDeDados(IDataBaseCreator $creator); + + /** + * Cria banco de dados + */ + public function criaBancoDeDados(IDataBaseCreator $creator); } diff --git a/src/Entity/EntidadeBase.php b/src/Entity/EntidadeBase.php index be58ecd..fb66b49 100644 --- a/src/Entity/EntidadeBase.php +++ b/src/Entity/EntidadeBase.php @@ -17,6 +17,16 @@ final public static function createFromForm($params) } } } + + public function getClassShortName() + { + return (new \ReflectionClass($this))->getShortName(); + } + + public function getClass() + { + return (new \ReflectionClass($this))->getName(); + } public function setUID($uid) diff --git a/src/Factory/AppFactory.php b/src/Factory/AppFactory.php index 8d54390..7765449 100644 --- a/src/Factory/AppFactory.php +++ b/src/Factory/AppFactory.php @@ -33,17 +33,11 @@ public static function getFactory() public static function getRepository(EntidadeBase $objeto) { - try { - $class = get_class($objeto); - $respositoryPath = DAOS . $class . 'DAO.php'; - if (!file_exists($respositoryPath)) { - return new GenericDAO($class); - } - require_once $respositoryPath; - $repository = $class . 'DAO'; - return new $repository; - } catch (Exception $e) { - throw new Exception($e->getMessage()); - } + $repository = '\\PseudoORM\\DAO\\' . $objeto->getClassShortName() . 'DAO'; + if(class_exists($repository)) + return new $repository($objeto->getClass()); + + return new GenericDAO($objeto->getClass()); } -} + +} \ No newline at end of file diff --git a/src/Services/IDataBaseCreator.php b/src/Services/IDatabaseCreator.php similarity index 91% rename from src/Services/IDataBaseCreator.php rename to src/Services/IDatabaseCreator.php index a231fcf..8a499ab 100644 --- a/src/Services/IDataBaseCreator.php +++ b/src/Services/IDatabaseCreator.php @@ -2,7 +2,7 @@ namespace PseudoORM\Services; -interface IDataBaseCreator +interface IDatabaseCreator { /** diff --git a/src/Services/PostgreSQLDataBaseCreator.php b/src/Services/PostgreSQLDatabaseCreator.php similarity index 96% rename from src/Services/PostgreSQLDataBaseCreator.php rename to src/Services/PostgreSQLDatabaseCreator.php index 028b667..a8b8628 100644 --- a/src/Services/PostgreSQLDataBaseCreator.php +++ b/src/Services/PostgreSQLDatabaseCreator.php @@ -2,11 +2,11 @@ namespace PseudoORM\Services; -use PseudoORM\Services\IDataBaseCreator; +use PseudoORM\Services\IDatabaseCreator; use Addendum\ReflectionAnnotatedClass; -class PostgreSQLDataBaseCreator implements IDataBaseCreator +class PostgreSQLDatabaseCreator implements IDatabaseCreator { protected $tableName; diff --git a/test/functional/check-environment.phpt b/test/functional/check-environment.phpt index 7de1a37..d7ba389 100644 --- a/test/functional/check-environment.phpt +++ b/test/functional/check-environment.phpt @@ -11,16 +11,16 @@ define("DB_PORT", 5432); define("DB_NAME", 'pseudoorm'); define("SCHEMA", ''); define('ENCODING', "SET NAMES 'utf8';"); + +/** + * @todo Remover constantes + */ define("DB_DSN", "pgsql:host=".DB_HOST.";port=".DB_PORT.";dbname=".DB_NAME.";"); define("SHOW_SQL_ERROR", PDO::ERRMODE_EXCEPTION); -define('MODELS', '../app/models/'); -define('DAOS', MODELS . 'DAO/impl/'); -define('EXCEPTIONS', MODELS . 'exception/'); - use PseudoORM\Entity\Usuario; use PseudoORM\Factory\AppFactory; -use PseudoORM\Services\PostgreSQLDataBaseCreator; +use PseudoORM\Services\PostgreSQLDatabaseCreator; require_once 'src/Annotations/Column.php'; require_once 'src/Annotations/Id.php'; @@ -36,7 +36,7 @@ require_once 'src/Annotations/Persistent.php'; $dao = AppFactory::getRepository(new Usuario()); // USe para gerar o script de criação do banco -$dao->generate(new PostgreSQLDataBaseCreator(), true); +$dao->criaBancoDeDados(new PostgreSQLDatabaseCreator()); // Realizar operações básicas $usuario = $dao->create();