Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
2 / 3
CRAP
94.12% covered (success)
94.12%
16 / 17
FactoryGenerator
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
2 / 3
4.00
94.12% covered (success)
94.12%
16 / 17
 configure()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 initialize(InputInterface $input, OutputInterface $output)
0.00% covered (danger)
0.00%
0 / 1
2.01
87.50% covered (warning)
87.50%
7 / 8
 execute(InputInterface $input, OutputInterface $output)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
4 / 4
<?php
/*
 * Mondrian
 */
namespace Trismegiste\Mondrian\Command;
use Symfony\Component\Console\Command\Command;
use Trismegiste\Mondrian\Refactor\FactoryGenBuilder;
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\Parser\PhpDumper;
use Trismegiste\Mondrian\Parser\NullDumper;
/**
 * FactoryGenerator is a refactoring tools which scans all new statements
 * and create a protected method for each.
 * 
 * With this, it is possible to mockup the new instance for unit testing
 */
class FactoryGenerator extends Command
{
    protected $dumper;
    protected $source;
    protected function configure()
    {
        $this->setName('refactor:factory')
                ->addArgument('file', InputArgument::REQUIRED, 'The source file to refactor')
                ->setDescription('Scans a file and replace new instances in methods by protected factories')
                ->addOption('dry', null, InputOption::VALUE_NONE, 'Dry run (no write)');
    }
    protected function initialize(InputInterface $input, OutputInterface $output)
    {
        $this->source = new \ArrayIterator(
                array(new \Symfony\Component\Finder\SplFileInfo(
                    $input->getArgument('file'), '', '')));
        if ($input->getOption('dry')) {
            $this->dumper = new NullDumper();
        } else {
            $this->dumper = new PhpDumper();
        }
    }
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $compil = new Linking(
                new Builder(), new FactoryGenBuilder($this->dumper));
        $compil->run($this->source);
    }
}