Completed
Push — master ( 838b08...10b695 )
by Greg
02:10
created

TableFormatter::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
namespace Consolidation\OutputFormatters\Formatters;
3
4
use Symfony\Component\Console\Output\OutputInterface;
5
use Symfony\Component\Console\Helper\Table;
6
7
use Consolidation\OutputFormatters\FormatterInterface;
8
use Consolidation\OutputFormatters\ConfigureInterface;
9
use Consolidation\OutputFormatters\ValidationInterface;
10
use Consolidation\OutputFormatters\Transformations\TableTransformation;
11
use Consolidation\OutputFormatters\Transformations\PropertyParser;
12
use Consolidation\OutputFormatters\Transformations\ReorderFields;
13
14
class TableFormatter implements FormatterInterface, ConfigureInterface, ValidationInterface
15
{
16
    protected $fieldLabels;
17
    protected $defaultFields;
18
    protected $tableStyle;
19
20
    public function __construct()
21
    {
22
        $this->tableStyle = 'default';
23
    }
24
25
    /**
26
     * @inheritdoc
27
     */
28
    public function configure($configurationData)
29
    {
30
        if (isset($configurationData['table-style'])) {
31
            $this->tableStyle = $configurationData['table-style'];
32
        }
33
    }
34
35
    public function validate($structuredData)
36
    {
37
        // If the returned data is of class RowsOfFields, that will
38
        // be converted into a TableTransformation object.
39
        if (!$structuredData instanceof TableTransformation) {
40
            // TODO: Define our own Exception class
41
            throw new \Exception("Data provided to table formatter must be an instance of RowsOfFields. Instead, a " . get_class($structuredData) . " was provided.", 1);
42
        }
43
        return $structuredData;
44
    }
45
46
    /**
47
     * @inheritdoc
48
     */
49
    public function write(OutputInterface $output, $tableTransformer, $options = [])
50
    {
51
        $options += [
52
            'table-style' => $this->tableStyle,
53
            'include-field-labels' => true,
54
        ];
55
56
        $table = new Table($output);
57
        $table->setStyle($options['table-style']);
58
        if ($options['include-field-labels']) {
59
            $table->setHeaders($tableTransformer->getHeaders());
60
        }
61
        $table->setRows($tableTransformer->getData());
62
        $table->render();
63
    }
64
}
65