-
-
Notifications
You must be signed in to change notification settings - Fork 502
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[MODM-112] Adding missing console commands for generating hydrator an…
…d proxy classes.
- Loading branch information
Showing
6 changed files
with
332 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
114 changes: 114 additions & 0 deletions
114
lib/Doctrine/ODM/MongoDB/Tools/Console/Command/GenerateHydratorsCommand.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
<?php | ||
/* | ||
* $Id$ | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
* This software consists of voluntary contributions made by many individuals | ||
* and is licensed under the LGPL. For more information, see | ||
* <http://www.doctrine-project.org>. | ||
*/ | ||
|
||
namespace Doctrine\ODM\MongoDB\Tools\Console\Command; | ||
|
||
use Symfony\Component\Console\Input\InputArgument, | ||
Symfony\Component\Console\Input\InputOption, | ||
Symfony\Component\Console, | ||
Doctrine\ODM\MongoDB\Tools\Console\MetadataFilter; | ||
|
||
/** | ||
* Command to (re)generate the hydrator classes used by doctrine. | ||
* | ||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL | ||
* @link www.doctrine-project.org | ||
* @since 2.0 | ||
* @version $Revision$ | ||
* @author Benjamin Eberlei <kontakt@beberlei.de> | ||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com> | ||
* @author Jonathan Wage <jonwage@gmail.com> | ||
* @author Roman Borschel <roman@code-factory.org> | ||
*/ | ||
class GenerateHydratorsCommand extends Console\Command\Command | ||
{ | ||
/** | ||
* @see Console\Command\Command | ||
*/ | ||
protected function configure() | ||
{ | ||
$this | ||
->setName('odm:generate:hydrators') | ||
->setDescription('Generates hydrator classes for document classes.') | ||
->setDefinition(array( | ||
new InputOption( | ||
'filter', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, | ||
'A string pattern used to match documents that should be processed.' | ||
), | ||
new InputArgument( | ||
'dest-path', InputArgument::OPTIONAL, | ||
'The path to generate your hydrator classes. If none is provided, it will attempt to grab from configuration.' | ||
), | ||
)) | ||
->setHelp(<<<EOT | ||
Generates hydrator classes for document classes. | ||
EOT | ||
); | ||
} | ||
|
||
/** | ||
* @see Console\Command\Command | ||
*/ | ||
protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output) | ||
{ | ||
$dm = $this->getHelper('dm')->getDocumentManager(); | ||
|
||
$metadatas = $dm->getMetadataFactory()->getAllMetadata(); | ||
$metadatas = MetadataFilter::filter($metadatas, $input->getOption('filter')); | ||
|
||
// Process destination directory | ||
if (($destPath = $input->getArgument('dest-path')) === null) { | ||
$destPath = $dm->getConfiguration()->getHydratorDir(); | ||
} | ||
|
||
if ( ! is_dir($destPath)) { | ||
mkdir($destPath, 0777, true); | ||
} | ||
|
||
$destPath = realpath($destPath); | ||
|
||
if ( ! file_exists($destPath)) { | ||
throw new \InvalidArgumentException( | ||
sprintf("Hydrators destination directory '<info>%s</info>' does not exist.", $destPath) | ||
); | ||
} else if ( ! is_writable($destPath)) { | ||
throw new \InvalidArgumentException( | ||
sprintf("Hydrators destination directory '<info>%s</info>' does not have write permissions.", $destPath) | ||
); | ||
} | ||
|
||
if (count($metadatas)) { | ||
foreach ($metadatas as $metadata) { | ||
$output->write( | ||
sprintf('Processing document "<info>%s</info>"', $metadata->name) . PHP_EOL | ||
); | ||
} | ||
|
||
// Generating Hydrators | ||
$dm->getHydratorFactory()->generateHydratorClasses($metadatas, $destPath); | ||
|
||
// Outputting information message | ||
$output->write(PHP_EOL . sprintf('Hydrator classes generated to "<info>%s</INFO>"', $destPath) . PHP_EOL); | ||
} else { | ||
$output->write('No Metadata Classes to process.' . PHP_EOL); | ||
} | ||
} | ||
} |
114 changes: 114 additions & 0 deletions
114
lib/Doctrine/ODM/MongoDB/Tools/Console/Command/GenerateProxiesCommand.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
<?php | ||
/* | ||
* $Id$ | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
* This software consists of voluntary contributions made by many individuals | ||
* and is licensed under the LGPL. For more information, see | ||
* <http://www.doctrine-project.org>. | ||
*/ | ||
|
||
namespace Doctrine\ODM\MongoDB\Tools\Console\Command; | ||
|
||
use Symfony\Component\Console\Input\InputArgument, | ||
Symfony\Component\Console\Input\InputOption, | ||
Symfony\Component\Console, | ||
Doctrine\ODM\MongoDB\Tools\Console\MetadataFilter; | ||
|
||
/** | ||
* Command to (re)generate the proxy classes used by doctrine. | ||
* | ||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL | ||
* @link www.doctrine-project.org | ||
* @since 2.0 | ||
* @version $Revision$ | ||
* @author Benjamin Eberlei <kontakt@beberlei.de> | ||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com> | ||
* @author Jonathan Wage <jonwage@gmail.com> | ||
* @author Roman Borschel <roman@code-factory.org> | ||
*/ | ||
class GenerateProxiesCommand extends Console\Command\Command | ||
{ | ||
/** | ||
* @see Console\Command\Command | ||
*/ | ||
protected function configure() | ||
{ | ||
$this | ||
->setName('odm:generate:proxies') | ||
->setDescription('Generates proxy classes for document classes.') | ||
->setDefinition(array( | ||
new InputOption( | ||
'filter', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, | ||
'A string pattern used to match documents that should be processed.' | ||
), | ||
new InputArgument( | ||
'dest-path', InputArgument::OPTIONAL, | ||
'The path to generate your proxy classes. If none is provided, it will attempt to grab from configuration.' | ||
), | ||
)) | ||
->setHelp(<<<EOT | ||
Generates proxy classes for document classes. | ||
EOT | ||
); | ||
} | ||
|
||
/** | ||
* @see Console\Command\Command | ||
*/ | ||
protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output) | ||
{ | ||
$dm = $this->getHelper('dm')->getDocumentManager(); | ||
|
||
$metadatas = $dm->getMetadataFactory()->getAllMetadata(); | ||
$metadatas = MetadataFilter::filter($metadatas, $input->getOption('filter')); | ||
|
||
// Process destination directory | ||
if (($destPath = $input->getArgument('dest-path')) === null) { | ||
$destPath = $dm->getConfiguration()->getProxyDir(); | ||
} | ||
|
||
if ( ! is_dir($destPath)) { | ||
mkdir($destPath, 0777, true); | ||
} | ||
|
||
$destPath = realpath($destPath); | ||
|
||
if ( ! file_exists($destPath)) { | ||
throw new \InvalidArgumentException( | ||
sprintf("Proxies destination directory '<info>%s</info>' does not exist.", $destPath) | ||
); | ||
} else if ( ! is_writable($destPath)) { | ||
throw new \InvalidArgumentException( | ||
sprintf("Proxies destination directory '<info>%s</info>' does not have write permissions.", $destPath) | ||
); | ||
} | ||
|
||
if (count($metadatas)) { | ||
foreach ($metadatas as $metadata) { | ||
$output->write( | ||
sprintf('Processing document "<info>%s</info>"', $metadata->name) . PHP_EOL | ||
); | ||
} | ||
|
||
// Generating Proxies | ||
$dm->getProxyFactory()->generateProxyClasses($metadatas, $destPath); | ||
|
||
// Outputting information message | ||
$output->write(PHP_EOL . sprintf('Proxy classes generated to "<info>%s</INFO>"', $destPath) . PHP_EOL); | ||
} else { | ||
$output->write('No Metadata Classes to process.' . PHP_EOL); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
<?php | ||
/* | ||
* $Id$ | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
* | ||
* This software consists of voluntary contributions made by many individuals | ||
* and is licensed under the LGPL. For more information, see | ||
* <http://www.doctrine-project.org>. | ||
*/ | ||
|
||
namespace Doctrine\ODM\MongoDB\Tools\Console; | ||
|
||
/** | ||
* Used by CLI Tools to restrict entity-based commands to given patterns. | ||
* | ||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL | ||
* @link www.doctrine-project.com | ||
* @since 1.0 | ||
* @version $Revision$ | ||
* @author Benjamin Eberlei <kontakt@beberlei.de> | ||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com> | ||
* @author Jonathan Wage <jonwage@gmail.com> | ||
* @author Roman Borschel <roman@code-factory.org> | ||
*/ | ||
class MetadataFilter extends \FilterIterator implements \Countable | ||
{ | ||
/** | ||
* Filter Metadatas by one or more filter options. | ||
* | ||
* @param array $metadatas | ||
* @param array|string $filter | ||
* @return array | ||
*/ | ||
static public function filter(array $metadatas, $filter) | ||
{ | ||
$metadatas = new MetadataFilter(new \ArrayIterator($metadatas), $filter); | ||
return iterator_to_array($metadatas); | ||
} | ||
|
||
private $_filter = array(); | ||
|
||
public function __construct(\ArrayIterator $metadata, $filter) | ||
{ | ||
$this->_filter = (array)$filter; | ||
parent::__construct($metadata); | ||
} | ||
|
||
public function accept() | ||
{ | ||
if (count($this->_filter) == 0) { | ||
return true; | ||
} | ||
|
||
$it = $this->getInnerIterator(); | ||
$metadata = $it->current(); | ||
|
||
foreach ($this->_filter AS $filter) { | ||
if (strpos($metadata->name, $filter) !== false) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
|
||
public function count() | ||
{ | ||
return count($this->getInnerIterator()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters