Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 72 |
Export | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
132 | |
0.00% |
0 / 72 |
run() | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 34 |
|||
getFormatterByExtension($location) | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 26 |
|||
setReport(IReport $report) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
setCommand(Command $command) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
setParameters(Parameters $parameters) | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
<?php | |
namespace Environaut\Export; | |
use Environaut\Command\Command; | |
use Environaut\Config\Parameters; | |
use Environaut\Export\IExport; | |
use Environaut\Export\Formatter\IReportFormatter; | |
use Environaut\Export\Formatter\ConsoleMessageFormatter; | |
use Environaut\Report\IReport; | |
/** | |
* Default export that is used for reports after checks are run. | |
* Outputs messages to the CLI and exports accumulated settings | |
* as JSON. | |
*/ | |
class Export implements IExport | |
{ | |
/** | |
* Default filename to be used when no export file locations are specified. | |
*/ | |
const DEFAULT_EXPORT_LOCATION = 'environaut-config.json'; | |
/** | |
* @var Command | |
*/ | |
protected $command; | |
/** | |
* @var IReport | |
*/ | |
protected $report; | |
/** | |
* @var Parameters | |
*/ | |
protected $parameters; | |
/** | |
* @var array supported export file extensions | |
*/ | |
protected $supported_export_file_extensions = array('json', 'xml', 'php', 'sh'); | |
/** | |
* Export current report as follows: | |
* | |
* 1. Display messages on CLI | |
* 2. Run all formatters and display there text results on CLI | |
* | |
* If no formatters have been specified a JsonSettingsWriter will be used, | |
* that writes all settings to a JSON file. | |
*/ | |
public function run() | |
{ | |
$output = $this->command->getOutput(); | |
$output->writeln(''); | |
$output->writeln('---------------------'); | |
$output->writeln('-- Report follows: --'); | |
$output->writeln('---------------------'); | |
$output->writeln(''); | |
$formatter = new ConsoleMessageFormatter(); | |
$console_report_text = $formatter->format($this->report); | |
$output->writeln($console_report_text); | |
$output->writeln(''); | |
$output->writeln('---------------------'); | |
$output->writeln('-- Export follows: --'); | |
$output->writeln('---------------------'); | |
$output->writeln(''); | |
$default_formatter = array('location' => self::DEFAULT_EXPORT_LOCATION); | |
$formatter_definitions = $this->parameters->get('formatters', array($default_formatter)); | |
foreach ($formatter_definitions as $formatter_definition) { | |
$params = new Parameters($formatter_definition); | |
$location = $params->get('location', self::DEFAULT_EXPORT_LOCATION); | |
if ($params->has('__class')) { | |
$formatter_class = $params->get('__class'); | |
} else { | |
$formatter_class = $this->getFormatterByExtension($location); | |
} | |
$formatter = new $formatter_class(); | |
$formatter->setParameters($params); | |
$output->writeln('Starting export via "' . $formatter_class . '".'); | |
$export_text = $formatter->format($this->report); | |
$output->writeln($export_text); | |
} | |
$output->writeln(''); | |
} | |
/** | |
* Returns a specific formatter instance depending on the file | |
* extension of the given export file location. | |
* | |
* @param string $location | |
* | |
* @return IReportFormatter | |
* | |
* @throws \InvalidArgumentException in case of unsupported file extensions | |
*/ | |
protected function getFormatterByExtension($location) | |
{ | |
$ext = pathinfo($location, PATHINFO_EXTENSION); | |
$formatter = null; | |
switch ($ext) { | |
case 'json': | |
$formatter = 'Environaut\Export\Formatter\JsonSettingsWriter'; | |
break; | |
case 'xml': | |
$formatter = 'Environaut\Export\Formatter\XmlSettingsWriter'; | |
break; | |
case 'php': | |
$formatter = 'Environaut\Export\Formatter\PhpSettingsWriter'; | |
break; | |
case 'sh': | |
$formatter = 'Environaut\Export\Formatter\ShellSettingsWriter'; | |
break; | |
default: | |
throw new \InvalidArgumentException( | |
'The given export file "' . $location . '" does not have a known extension.' . PHP_EOL . | |
'Supported export file extensions are: ' . implode(', ', $this->supported_export_file_extensions) | |
); | |
break; | |
} | |
return $formatter; | |
} | |
/** | |
* Set report to be handled by this exporter. | |
* | |
* @param IReport $report | |
*/ | |
public function setReport(IReport $report) | |
{ | |
$this->report = $report; | |
} | |
/** | |
* Environaut command for access to input and output. | |
* | |
* @param Command $command | |
*/ | |
public function setCommand(Command $command) | |
{ | |
$this->command = $command; | |
} | |
/** | |
* Runtime parameters to configure the export operations. | |
* | |
* @param Parameters $parameters runtime parameters | |
*/ | |
public function setParameters(Parameters $parameters) | |
{ | |
$this->parameters = $parameters; | |
} | |
} |