ColumnCollection   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 21
c 1
b 0
f 0
dl 0
loc 87
ccs 27
cts 27
cp 1
rs 10
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A _fetchColumns() 0 10 2
A _setColumnFormatter() 0 9 2
A getUnmutatedColumns() 0 5 1
A __construct() 0 5 1
A push() 0 5 1
A getHeaders() 0 8 1
1
<?php
2
3
namespace hamburgscleanest\DataTables\Models\Column;
4
5
use hamburgscleanest\DataTables\Models\Header;
6
use Illuminate\Database\Eloquent\Model;
7
use Illuminate\Support\Collection;
8
9
/**
10
 * Class ColumnCollection
11
 * @package hamburgscleanest\DataTables\Models\Column
12
 */
13
class ColumnCollection extends Collection {
14
15
    /** @var Model */
16
    private $_model;
17
18
    /**
19
     * Create a new collection of columns.
20
     *
21
     * @param  mixed $items
22
     * @param Model $model
23
     */
24 71
    public function __construct($items, Model $model)
25
    {
26 71
        $this->_model = $model;
27
28 71
        parent::__construct($this->_fetchColumns($items));
29 71
    }
30
31
    /**
32
     * Returns an array of Column objects which may be bound to a formatter.
33
     *
34
     * @param array $columns
35
     * @return array
36
     */
37 71
    private function _fetchColumns(array $columns) : array
38
    {
39 71
        $columnModels = [];
40 71
        foreach ($columns as $column => $formatter)
41
        {
42 58
            [$column, $formatter] = $this->_setColumnFormatter($column, $formatter);
43 58
            $columnModels[] = new Column($column, $formatter, $this->_model);
44
        }
45
46 71
        return $columnModels;
47
    }
48
49
    /**
50
     * @param string|int $column
51
     * @param $formatter
52
     * @return array
53
     */
54 58
    private function _setColumnFormatter($column, $formatter) : array
55
    {
56 58
        if (\is_int($column))
57
        {
58 56
            $column = $formatter;
59 56
            $formatter = null;
60
        }
61
62 58
        return [$column, $formatter];
63
    }
64
65
    /**
66
     * Push a column onto the end of the collection.
67
     *
68
     * @param  mixed $value
69
     * @return ColumnCollection
70
     */
71 2
    public function push($value) : ColumnCollection
72
    {
73 2
        $this->items += $this->_fetchColumns(\array_wrap($value));
74
75 2
        return $this;
76
    }
77
78
    /**
79
     * @return array
80
     */
81 51
    public function getUnmutatedColumns() : array
82
    {
83
        return \array_filter($this->items, function($column) {
84
            /** @var Column $column */
85 46
            return !$column->isMutated();
86 51
        });
87
    }
88
89
    /**
90
     * @return array
91
     */
92 46
    public function getHeaders() : array
93
    {
94 46
        return \array_map(
95 46
            function($column) {
96
                /** @var Column $column */
97 44
                return new Header($column->getKey());
98 46
            },
99 46
            $this->items
100
        );
101
    }
102
}