From 7c7ac126e4b84e0af1c06f7338f34fdf0c9ce9ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Gomez?= Date: Sun, 3 Nov 2013 21:50:33 +0000 Subject: [PATCH] Implemented the DatabaseReverse command --- Command/AbstractCommand.php | 25 +++++++----- Command/DatabaseReverseCommand.php | 62 ++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 9 deletions(-) create mode 100644 Command/DatabaseReverseCommand.php diff --git a/Command/AbstractCommand.php b/Command/AbstractCommand.php index 84e7ed7..67e68e3 100644 --- a/Command/AbstractCommand.php +++ b/Command/AbstractCommand.php @@ -270,23 +270,30 @@ EOT; */ protected function getConnections(array $connections) { - $knownConnections = $this->getContainer()->getParameter('propel.configuration'); - $dsnList = array(); foreach ($connections as $connection) { - if (!isset($knownConnections[$connection])) { - throw new \InvalidArgumentException(sprintf('Unknown connection "%s"', $connection)); - } - - $dsnList[] = $this->buildDsn($connection, $knownConnections[$connection]['connection']); + $dsnList[] = sprintf('%s=%s', $connection, $this->getDsn($connection)); } return $dsnList; } - protected function buildDsn($connectionName, array $connectionData) + protected function getConnectionData($name) { - return sprintf('%s=%s;user=%s;password=%s', $connectionName, $connectionData['dsn'], $connectionData['user'], $connectionData['password']); + $knownConnections = $this->getContainer()->getParameter('propel.configuration'); + if (!isset($knownConnections[$name])) { + throw new \InvalidArgumentException(sprintf('Unknown connection "%s"', $name)); + } + + return $knownConnections[$name]; + } + + protected function getDsn($connectionName) + { + $connection = $this->getConnectionData($connectionName); + $connectionData = $connection['connection']; + + return sprintf('%s;user=%s;password=%s', $connectionData['dsn'], $connectionData['user'], $connectionData['password']); } /** diff --git a/Command/DatabaseReverseCommand.php b/Command/DatabaseReverseCommand.php new file mode 100644 index 0000000..c879bd1 --- /dev/null +++ b/Command/DatabaseReverseCommand.php @@ -0,0 +1,62 @@ + + */ +class DatabaseReverseCommand extends AbstractCommand +{ + /** + * {@inheritdoc} + */ + protected function configure() + { + parent::configure(); + + $this + ->setName('propel:database:reverse') + ->setDescription('Reverse-engineer a XML schema file based on given database') + + ->addOption('connection', null, InputOption::VALUE_REQUIRED, 'Connection to use. Example: default') + ->addOption('output-dir', null, InputOption::VALUE_REQUIRED, 'The output directory', BaseDatabaseReverseCommand::DEFAULT_OUTPUT_DIRECTORY) + ->addOption('database-name', null, InputOption::VALUE_REQUIRED, 'The database name to reverse', BaseDatabaseReverseCommand::DEFAULT_DATABASE_NAME) + ->addOption('schema-name', null, InputOption::VALUE_REQUIRED, 'The schema name to generate', BaseDatabaseReverseCommand::DEFAULT_SCHEMA_NAME) + ; + } + + /** + * {@inheritdoc} + */ + protected function createSubCommandInstance() + { + return new BaseDatabaseReverseCommand(); + } + + /** + * {@inheritdoc} + */ + protected function getSubCommandArguments(InputInterface $input) + { + return array( + '--output-dir' => $input->getOption('output-dir'), + '--database-name' => $input->getOption('database-name'), + '--schema-name' => $input->getOption('schema-name'), + // this one is an argument, so no leading '--' + 'connection' => $this->getDsn($input->getOption('connection')), + ); + } +}