annotate vendor/consolidation/output-formatters/src/Formatters/SectionsFormatter.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2 namespace Consolidation\OutputFormatters\Formatters;
Chris@0 3
Chris@0 4 use Symfony\Component\Console\Output\OutputInterface;
Chris@0 5 use Symfony\Component\Console\Helper\Table;
Chris@0 6
Chris@0 7 use Consolidation\OutputFormatters\Validate\ValidDataTypesInterface;
Chris@0 8 use Consolidation\OutputFormatters\Options\FormatterOptions;
Chris@0 9 use Consolidation\OutputFormatters\Validate\ValidDataTypesTrait;
Chris@0 10 use Consolidation\OutputFormatters\StructuredData\TableDataInterface;
Chris@0 11 use Consolidation\OutputFormatters\Transformations\ReorderFields;
Chris@0 12 use Consolidation\OutputFormatters\Exception\IncompatibleDataException;
Chris@0 13 use Consolidation\OutputFormatters\StructuredData\PropertyList;
Chris@0 14
Chris@0 15 /**
Chris@0 16 * Display sections of data.
Chris@0 17 *
Chris@0 18 * This formatter takes data in the RowsOfFields data type.
Chris@0 19 * Each row represents one section; the data in each section
Chris@0 20 * is rendered in two columns, with the key in the first column
Chris@0 21 * and the value in the second column.
Chris@0 22 */
Chris@0 23 class SectionsFormatter implements FormatterInterface, ValidDataTypesInterface, RenderDataInterface
Chris@0 24 {
Chris@0 25 use ValidDataTypesTrait;
Chris@0 26 use RenderTableDataTrait;
Chris@0 27
Chris@0 28 public function validDataTypes()
Chris@0 29 {
Chris@0 30 return
Chris@0 31 [
Chris@0 32 new \ReflectionClass('\Consolidation\OutputFormatters\StructuredData\RowsOfFields')
Chris@0 33 ];
Chris@0 34 }
Chris@0 35
Chris@0 36 /**
Chris@0 37 * @inheritdoc
Chris@0 38 */
Chris@0 39 public function validate($structuredData)
Chris@0 40 {
Chris@0 41 // If the provided data was of class RowsOfFields
Chris@0 42 // or PropertyList, it will be converted into
Chris@0 43 // a TableTransformation object by the restructure call.
Chris@0 44 if (!$structuredData instanceof TableDataInterface) {
Chris@0 45 throw new IncompatibleDataException(
Chris@0 46 $this,
Chris@0 47 $structuredData,
Chris@0 48 $this->validDataTypes()
Chris@0 49 );
Chris@0 50 }
Chris@0 51 return $structuredData;
Chris@0 52 }
Chris@0 53
Chris@0 54 /**
Chris@0 55 * @inheritdoc
Chris@0 56 */
Chris@0 57 public function write(OutputInterface $output, $tableTransformer, FormatterOptions $options)
Chris@0 58 {
Chris@0 59 $table = new Table($output);
Chris@0 60 $table->setStyle('compact');
Chris@0 61 foreach ($tableTransformer as $rowid => $row) {
Chris@0 62 $rowLabel = $tableTransformer->getRowLabel($rowid);
Chris@0 63 $output->writeln('');
Chris@0 64 $output->writeln($rowLabel);
Chris@0 65 $sectionData = new PropertyList($row);
Chris@0 66 $sectionOptions = new FormatterOptions([], $options->getOptions());
Chris@0 67 $sectionTableTransformer = $sectionData->restructure($sectionOptions);
Chris@0 68 $table->setRows($sectionTableTransformer->getTableData(true));
Chris@0 69 $table->render();
Chris@0 70 }
Chris@0 71 }
Chris@0 72 }