Completed
Push — master ( 1bff6a...345056 )
by
unknown
01:32
created

Chart   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 139
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 13
c 2
b 0
f 0
lcom 1
cbo 0
dl 0
loc 139
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A addSubset() 0 9 2
B render() 0 29 4
A addSimpleSubset() 0 8 1
A addCascadeSubset() 0 12 1
A callFunc() 0 4 1
A makeSubsetClass() 0 6 1
A dotNotationToArray() 0 15 2
1
<?php
2
3
namespace EnergieProduction\Chart;
4
5
use Closure;
6
use Illuminate\Support\Collection;
7
use EnergieProduction\Chart\Subsets;
8
9
Class Chart {
10
11
	protected $subsetList;
12
13
	/**
14
	 * [__construct description]
15
	 * @param \Illuminate\Support\Collection $subsetList
16
	 */
17
	public function __construct(Collection $subsetList)
18
	{
19
		$this->subsetList = $subsetList;
20
	}
21
22
	/**
23
	 * [addSubset description]
24
	 * @param string  $subset
25
	 * @param \Closure $closure
26
	 */
27
	public function addSubset($subset, Closure $closure)
28
	{
29
		if (str_contains($subset, '.')) {
30
			$this->addCascadeSubset($subset, $closure);
31
		}
32
		else {
33
			$this->addSimpleSubset($subset, $closure);
34
		}
35
	}
36
37
	/**
38
	 * [render description]
39
	 * @return json [description]
40
	 */
41
	public function render()
42
	{
43
		$formatedChart = [];
44
45
		foreach ($this->subsetList as $subset) {
46
47
			$render = $subset->render();
48
49
			if ($subset->cascade) {
50
51
				$tmpArray = [];
52
53
				$this->dotNotationToArray($tmpArray, $subset->cascade, $render);
54
55
				$render = $tmpArray;
56
			}
57
58
			$formatedChart = array_merge_recursive($formatedChart, $render);
59
		}
60
61
		$formatedChart = json_encode($formatedChart);
62
63
		if (str_contains($formatedChart, '"#!!')) {
64
			$formatedChart = str_replace('"#!!', '', $formatedChart);
65
			$formatedChart = str_replace('!!#"', '', $formatedChart);
66
		}
67
68
		return $formatedChart;
69
	}
70
71
	/**
72
	 * [addSimpleSubset description]
73
	 * @param string  $subset
74
	 * @param \Closure $closure
75
	 */
76
	protected function addSimpleSubset($subset, Closure $closure)
77
	{
78
		$subset = $this->makeSubsetClass($subset);
79
80
		$this->callFunc($closure, $subset);
81
82
		$this->subsetList->push($subset);
83
	}
84
85
	/**
86
	 * [addCascadeSubset description]
87
	 * @param string  $cascadeSubsetNotation
88
	 * @param \Closure $closure
89
	 */
90
	protected function addCascadeSubset($cascadeSubsetNotation, Closure $closure)
91
	{
92
		$subsetsList = explode('.', $cascadeSubsetNotation);
93
94
		$subset = $this->makeSubsetClass(end($subsetsList));
95
96
		$subset->setCascade($cascadeSubsetNotation);
97
98
		$this->callFunc($closure, $subset);
99
100
		$this->subsetList->push($subset);
101
	}
102
103
	/**
104
	 * [callFunc description]
105
	 * @param  \Closure $closure
106
	 * @param  \EnergieProduction\Subsets\* $class
107
	 */
108
	protected function callFunc(Closure $closure, $class)
109
	{
110
		return call_user_func($closure, $class);
111
	}
112
113
	/**
114
	 * [makeSubsetClass description]
115
	 * @param  string $subset
116
	 * @return \EnergieProduction\Subsets\*
117
	 */
118
	protected function makeSubsetClass($subset)
119
	{
120
		$class = "EnergieProduction\\Chart\\Subsets\\" . ucfirst($subset);
121
122
		return new $class;
123
	}
124
125
	/**
126
	 * [dotNotationToArray description]
127
	 * @param  array  &$arr
128
	 * @param  string $path
129
	 * @param  array $val
130
	 * @return array
131
	 */
132
	protected function dotNotationToArray(array &$arr, $path, $val)
133
	{
134
	   $loc = &$arr;
135
136
	   $path = explode('.', $path);
137
138
	   array_pop($path);
139
140
	   foreach($path as $step)
141
	   {
142
	     $loc = &$loc[$step];
143
	   }
144
145
	   return $loc = $val;
146
	}
147
}
148