Completed
Push — master ( ab8abe...0360f2 )
by Peter
05:43
created

MultiFinderEvents   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 94.12%

Importance

Changes 0
Metric Value
wmc 8
lcom 0
cbo 4
dl 0
loc 37
ccs 16
cts 17
cp 0.9412
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A trigger() 0 8 2
A handle() 0 12 3
A handleOne() 0 10 3
1
<?php
2
3
namespace Maslosoft\Manganel\Helpers;
4
5
use Maslosoft\Mangan\Events\Event;
6
use Maslosoft\Mangan\Events\ModelEvent;
7
use Maslosoft\Mangan\Helpers\FinderEvents;
8
use Maslosoft\Manganel\Interfaces\ModelsAwareInterface;
9
10
/**
11
 * Finder events helper supporting multiple models.
12
 * Requires finder to implement `ModelsAwareInterface`
13
 *
14
 * @see ModelsAwareInterface
15
 * @author Piotr Maselkowski <pmaselkowski at gmail.com>
16
 */
17
class MultiFinderEvents extends FinderEvents
18
{
19
20 10
	protected function trigger($finder, $event)
21
	{
22 10
		assert($finder instanceof ModelsAwareInterface);
23 10
		foreach ($finder->getModels() as $model)
24
		{
25 10
			Event::trigger($model, $event);
26
		}
27 10
	}
28
29 50
	protected function handle($finder, $event)
30
	{
31 50
		assert($finder instanceof ModelsAwareInterface);
32 50
		foreach ($finder->getModels() as $model)
33
		{
34 50
			if (!$this->handleOne($model, $event))
35
			{
36 50
				return false;
37
			}
38
		}
39 50
		return true;
40
	}
41
42 50
	protected function handleOne($model, $eventName)
43
	{
44 50
		if (!Event::hasHandler($model, $eventName))
45
		{
46
			return true;
47
		}
48 50
		$event = new ModelEvent();
49 50
		Event::trigger($model, $eventName, $event);
50 50
		return $event->isValid || $event->handled;
51
	}
52
53
}
54