Completed
Push — aspects ( 1f6fa3 )
by Peter
08:00
created

AspectsTrait::hasAspect()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: peter
5
 * Date: 18.06.18
6
 * Time: 22:02
7
 */
8
9
namespace Maslosoft\Mangan\Traits;
10
11
12
use Maslosoft\Mangan\AspectManager;
13
use Maslosoft\Mangan\Helpers\CompositionIterator;
14
use Maslosoft\Mangan\Interfaces\AspectsInterface;
15
16
/**
17
 * Use this trait for easy implementation of
18
 * AspectsInterface
19
 * @see AspectManager
20
 * @see AspectsInterface
21
 * @package Maslosoft\Mangan\Traits
22
 */
23
trait AspectsTrait
24
{
25
	private $aspects = [];
26
27
	/**
28
	 * Add aspect
29
	 * @param string $aspect
30
	 */
31 44
	public function addAspect($aspect)
32
	{
33 44
		$this->aspects[(string)$aspect] = true;
34 44
		$it = new CompositionIterator($this);
35 44
		$it->ofType(AspectsInterface::class);
36 44
		foreach($it as $subDocument)
37
		{
38 8
			AspectManager::addAspect($subDocument, $aspect);
39
		}
40 44
	}
41
42
	/**
43
	 * Remove aspect
44
	 * @param string $aspect
45
	 */
46 44
	public function removeAspect($aspect)
47
	{
48 44
		unset($this->aspects[(string)$aspect]);
49 44
		$it = new CompositionIterator($this);
50 44
		$it->ofType(AspectsInterface::class);
51 44
		foreach($it as $subDocument)
52
		{
53 8
			AspectManager::removeAspect($subDocument, $aspect);
54
		}
55 44
	}
56
57
	/**
58
	 * Check if has aspect
59
	 * @param string $aspect
60
	 * @return bool
61
	 */
62 1
	public function hasAspect($aspect)
63
	{
64 1
		return isset($this->aspects[(string)$aspect]);
65
	}
66
67
}