AspectsTrait::addAspect()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

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