Passed
Branch master (7949ab)
by Tomáš
02:07
created

Progression::progress()   B

Complexity

Conditions 10
Paths 36

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 10

Importance

Changes 0
Metric Value
cc 10
eloc 13
nc 36
nop 1
dl 0
loc 20
ccs 14
cts 14
cp 1
crap 10
rs 7.6666
c 0
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace TournamentGenerator;
4
5
/**
6
 *
7
 */
8
class Progression
9
{
10
11
	private $from;
12
	private $to;
13
	private $start = 0;
14
	private $len = null;
15
	private $filters = [];
16
17 32
	public function __construct(Group $from, Group $to, int $start = 0, int $len = null) {
18 32
		$this->from = $from;
19 32
		$this->to = $to;
20 32
		$this->start = $start;
21 32
		$this->len = $len;
22 32
	}
23
24 17
	public function __toString() {
25 17
		return 'Team from '.$this->from;
26
	}
27
28 7
	public function addFilter(TeamFilter ...$filters) {
29 7
		foreach ($filters as $filter) {
30 7
			$this->filters[] = $filter;
31
		}
32 7
		return $this;
33
	}
34
35 31
	public function progress(bool $blank = false) {
36 31
		if ($blank) $teams = $this->from->isPlayed() ? $this->from->sortTeams(null, $this->filters) : $this->from->simulate($this->filters);
37 14
		else $teams = $this->from->sortTeams(null, $this->filters);
38
39 31
		if (count($this->filters) === 0 || $this->len !== null || $this->start !== 0) $next = array_splice($teams, $this->start, ($this->len === null ? count($teams) : $this->len));
40 4
		else $next = $teams;
41
42 31
		$i = 1;
43
44 31
		foreach ($next as $team) {
45 31
			if ($blank) {
46 17
				$this->to->addTeam(new BlankTeam($this.' - '.$i, $team));
47 17
				$i++;
48
			}
49 31
			else $team->sumPoints += $this->from->progressPoints;
50
		}
51
52 31
		$this->from->addProgressed($next);
53 31
		if (!$blank) $this->to->addTeam($next);
54 31
		return $this;
55
	}
56
57
}
58