Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
83.33% |
5 / 6 |
CRAP | |
95.00% |
38 / 40 |
AbstractParse | |
0.00% |
0 / 1 |
|
87.50% |
7 / 8 |
9 | |
95.00% |
38 / 40 |
getSubname() | |
100.00% |
1 / 1 |
1 | ||||||
getFullDesc() | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
processGraph(Graph $g, OutputInterface $out) | |
100.00% |
1 / 1 |
1 | ||||||
configure() | |
100.00% |
1 / 1 |
1 | |
100.00% |
8 / 8 |
|||
execute(InputInterface $input, OutputInterface $output) | |
0.00% |
0 / 1 |
2.01 | |
86.67% |
13 / 15 |
|||
getConfig($dir) | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
initialize(InputInterface $input, OutputInterface $output) | |
100.00% |
1 / 1 |
1 | |
100.00% |
8 / 8 |
|||
getPhpFinder($directory, $ignoreDir) | |
100.00% |
1 / 1 |
1 | |
100.00% |
6 / 6 |
<?php | |
/* | |
* Mondrian | |
*/ | |
namespace Trismegiste\Mondrian\Command; | |
use Symfony\Component\Console\Command\Command; | |
use Symfony\Component\Console\Input\InputInterface; | |
use Symfony\Component\Console\Output\OutputInterface; | |
use Symfony\Component\Console\Input\InputArgument; | |
use Symfony\Component\Console\Input\InputOption; | |
use Trismegiste\Mondrian\Builder\Linking; | |
use Trismegiste\Mondrian\Builder\Statement\Builder; | |
use Trismegiste\Mondrian\Transform\GraphBuilder; | |
use Trismegiste\Mondrian\Transform\Format\Factory; | |
use Symfony\Component\Finder\Finder; | |
use Trismegiste\Mondrian\Graph\Graph; | |
use Trismegiste\Mondrian\Graph\Digraph; | |
use Trismegiste\Mondrian\Config\Helper; | |
use Trismegiste\Mondrian\Transform\Logger\NullLogger; | |
/** | |
* AbstractParse transforms a bunch of php files into a digraph | |
* and exports it into a report file | |
* | |
* Design pattern : Template Method | |
*/ | |
abstract class AbstractParse extends Command | |
{ | |
protected $fineTuning; | |
protected $phpfinder; | |
protected $reportName; | |
protected $reportFormat; | |
abstract protected function getSubname(); | |
protected function getFullDesc() | |
{ | |
return 'Parses a directory to generate a digraph'; | |
} | |
/** | |
* The method that does the job : it computes/decorates/redifines the | |
* graph passed in parameter. | |
* | |
* @param Graph $g the graph to process | |
* @param OutputInterface $out console output | |
* | |
* @return Graph the processed graph (the same or another) | |
*/ | |
abstract protected function processGraph(Graph $g, OutputInterface $out); | |
protected function configure() | |
{ | |
$this | |
->setName($this->getSubname()) | |
->setDescription($this->getFullDesc()) | |
->addArgument('dir', InputArgument::REQUIRED, 'The directory to explore') | |
->addArgument('report', InputArgument::OPTIONAL, 'The filename of the report', 'report') | |
->addOption('ignore', 'i', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Directories to ignore', array('Tests', 'vendor')) | |
->addOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of export', 'dot'); | |
} | |
/** | |
* {@inheritDoc} | |
*/ | |
protected function execute(InputInterface $input, OutputInterface $output) | |
{ | |
$graph = new Digraph(); | |
$logger = new NullLogger(); | |
$compil = new Linking(new Builder(), new GraphBuilder($this->fineTuning, $graph, $logger)); | |
$output->writeln(sprintf("Parsing %d files...", $this->phpfinder->count())); | |
$compil->run($this->phpfinder->getIterator()); | |
$output->writeln(sprintf("Processing digraph with %d vertices and %d edges...", count($graph->getVertexSet()), count($graph->getEdgeSet()))); | |
$processed = $this->processGraph($graph, $output); | |
$ff = new Factory(); | |
$dumper = $ff->create($processed, $this->reportFormat); | |
file_put_contents($this->reportName, $dumper->export()); | |
$output->writeln("Report $this->reportName created"); | |
if ($output->getVerbosity() == OutputInterface::VERBOSITY_VERBOSE) { | |
$output->writeln(sprintf("<comment>%.0f MB used</comment>", memory_get_peak_usage() / 1e6)); | |
} | |
} | |
/** | |
* get the graph section of the configuration for this package | |
* | |
* @param string $dir the root dir of the package | |
* | |
* @return array | |
*/ | |
protected function getConfig($dir) | |
{ | |
$helper = new Helper(); | |
return $helper->getGraphConfig($dir); | |
} | |
/** | |
* Inject parameters of the command | |
*/ | |
protected function initialize(InputInterface $input, OutputInterface $output) | |
{ | |
$directory = $input->getArgument('dir'); | |
$ignoreDir = $input->getOption('ignore'); | |
$this->fineTuning = $this->getConfig($directory); | |
$this->phpfinder = $this->getPhpFinder($directory, $ignoreDir); | |
$this->reportName = $input->getArgument('report'); | |
$this->reportFormat = $input->getOption('format'); | |
$this->reportName = "$this->reportName.$this->reportFormat"; | |
} | |
protected function getPhpFinder($directory, $ignoreDir) | |
{ | |
$scan = new Finder(); | |
$scan->files() | |
->in($directory) | |
->name('*.php') | |
->exclude($ignoreDir); | |
return $scan; | |
} | |
} |