Passed
Push — master ( d74703...28a6a0 )
by Roman
02:05
created

AbstractFormater::format()   C

Complexity

Conditions 7
Paths 12

Size

Total Lines 36
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 31
CRAP Score 7

Importance

Changes 0
Metric Value
dl 0
loc 36
ccs 31
cts 31
cp 1
rs 6.7272
c 0
b 0
f 0
cc 7
eloc 25
nc 12
nop 2
crap 7
1
<?php
2
3
4
namespace ToolkitLab\ASCII\Formater;
5
6
7
use ToolkitLab\ASCII\FormaterInterface;
8
use ToolkitLab\ASCII\Table;
9
10
abstract class AbstractFormater implements FormaterInterface
11
{
12
    /**
13
     * @var Table
14
     */
15
    protected $table;
16
17
    protected $metadata = [];
18
19
    public function setMeta($key, $value) {
20
        $this->metadata[$key] = $value;
21
    }
22
23 20
    public function format(Table $table, $firstRowAsHeader = true){
24 20
        $this->table = $table;
25 20
        $str = "";
26
27 20
        $firsRow = 0;
28 20
        if ($firstRowAsHeader) {
29 10
            $str .= $this->header();
30 10
            $firsRow = 1;
31 20
        } else if ($this->metadata['useHeader']) {
32 8
            $delimiter = $this->metadata["HBL"];
33 8
            for ($i = 0; $i < $this->table->getDimensionX(); $i++) {
34 8
                $columnLenght = $this->table->getColumnsMaxLenght($i) + 2;
35 8
                $str .= $delimiter;
36 8
                $str .= str_repeat($this->metadata["HPAD"], $columnLenght);
37 8
                $delimiter = $this->metadata["HBM"];
38 8
            }
39 8
            $str .= $this->metadata["HBR"] . PHP_EOL;
40
41 8
        }
42
43 20
        for ($i = $firsRow; $i < $this->table->getDimensionY(); $i++){
44 20
            $str .= $this->line($i);
45 20
        }
46
47 20
        if ($this->metadata['useFooter']) {
48 16
            $delimiter = $this->metadata["FBL"];
49 16
            for ($i = 0; $i < $this->table->getDimensionX(); $i++) {
50 16
                $columnLenght = $this->table->getColumnsMaxLenght($i) + 2;
51 16
                $str .= $delimiter;
52 16
                $str .= str_repeat($this->metadata["FPAD"], $columnLenght);
53 16
                $delimiter = $this->metadata["FBM"];
54 16
            }
55 16
            $str .= $this->metadata["FBR"] . PHP_EOL;
56 16
        }
57
58 20
        return $str;
59
    }
60
61
62 20
    private function line($rowIndex) {
63 20
        $retStr = "";
64 20
        $delimiter = $this->metadata["BL"];
65 20
        for ($i = 0; $i < $this->table->getDimensionX(); $i++){
66 20
            $retStr .= $delimiter;
67 20
            $cell = $this->table->getCell($i, $rowIndex);
68 20
            $retStr .= " " . $cell . str_repeat(" ", $this->table->getColumnsMaxLenght($i) - strlen($cell)) . " ";
69 20
            $delimiter = $this->metadata["BM"];
70 20
        }
71 20
        $retStr .= $this->metadata["BR"] . PHP_EOL;
72 20
        return $retStr;
73
    }
74
75 10
    protected function header() {
76 10
        $retStr = "";
77
78
        // First row
79 10
        if ($this->metadata['useHeader']) {
80 8
            $delimiter = $this->metadata["HBL"];
81 8
            for ($i = 0; $i < $this->table->getDimensionX(); $i++) {
82 8
                $columnLenght = $this->table->getColumnsMaxLenght($i) + 2;
83 8
                $retStr .= $delimiter;
84 8
                $retStr .= str_repeat($this->metadata["HPAD"], $columnLenght);
85 8
                $delimiter = $this->metadata["HBM"];
86 8
            }
87 8
            $retStr .= $this->metadata["HBR"] . PHP_EOL;
88 8
        }
89
90
        // Second row
91 10
        $delimiter = $this->metadata["BL"];
92 10
        for ($i = 0; $i < $this->table->getDimensionX(); $i++){
93 10
            $retStr .= $delimiter;
94 10
            $retStr .= " " . $this->table->getCell($i, 0) . " ";
95 10
        }
96 10
        $retStr .= $this->metadata["BR"] . PHP_EOL;
97
98
        // Third row
99 10
        $delimiter = $this->metadata["H2BL"];
100 10
        for ($i = 0; $i < $this->table->getDimensionX(); $i++){
101 10
            $columnLenght = $this->table->getColumnsMaxLenght($i) + 2;
102 10
            $retStr .= $delimiter;
103 10
            $retStr .= str_repeat($this->metadata["BPAD"], $columnLenght);
104 10
            $delimiter = $this->metadata["H2BM"];
105 10
        }
106 10
        $retStr .= $this->metadata["H2BR"] . PHP_EOL;
107
108
109 10
        return $retStr;
110
    }
111
}