AbstractPipe::callBefore()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php namespace Cerbero\Workflow\Pipes;
2
3
use \Closure;
4
use Illuminate\Contracts\Container\Container;
5
6
/**
7
 * Abstract implementation of a pipe.
8
 *
9
 * @author	Andrea Marco Sartori
10
 */
11
abstract class AbstractPipe implements PipeInterface {
12
13
	/**
14
	 * @author	Andrea Marco Sartori
15
	 * @var		Illuminate\Contracts\Container\Container	$container	Service container.
16
	 */
17
	protected $container;
18
	
19
	/**
20
	 * Set the dependencies.
21
	 *
22
	 * @author	Andrea Marco Sartori
23
	 * @param	Illuminate\Contracts\Container\Container	$container
24
	 * @return	void
0 ignored issues
show
Comprehensibility Best Practice introduced by
Adding a @return annotation to constructors is generally not recommended as a constructor does not have a meaningful return value.

Adding a @return annotation to a constructor is not recommended, since a constructor does not have a meaningful return value.

Please refer to the PHP core documentation on constructors.

Loading history...
25
	 */
26
	public function __construct(Container $container)
27
	{
28
		$this->container = $container;
0 ignored issues
show
Documentation Bug introduced by
It seems like $container of type object<Illuminate\Contracts\Container\Container> is incompatible with the declared type object<Cerbero\Workflow\...ts\Container\Container> of property $container.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
29
	}
30
31
	/**
32
	 * Handle the given job.
33
	 *
34
	 * @author	Andrea Marco Sartori
35
	 * @param	mixed	$job
36
	 * @param	Closure	$next
37
	 * @return	mixed
38
	 */
39
	public function handle($job, Closure $next)
40
	{
41
		$this->callBefore($job);
42
43
		$handled = $next($job);
44
45
		$this->callAfter($handled, $job);
46
47
		return $handled;
48
	}
49
50
	/**
51
	 * Call the before method.
52
	 *
53
	 * @author	Andrea Marco Sartori
54
	 * @param	Cerbero\Jobs\Job	$job
55
	 * @return	void
56
	 */
57
	protected function callBefore($job)
58
	{
59
		$this->callIfExists('before', [$job]);
60
	}
61
62
	/**
63
	 * Call a method if it exists and resolve its dependencies.
64
	 *
65
	 * @author	Andrea Marco Sartori
66
	 * @param	string	$method
67
	 * @param	array	$parameters
68
	 * @return	void
69
	 */
70
	private function callIfExists($method, array $parameters = [])
71
	{
72
		if(method_exists($this, $method))
73
		{
74
			$this->container->call([$this, $method], $parameters);
75
		}
76
	}
77
78
	/**
79
	 * Call the after method.
80
	 *
81
	 * @author	Andrea Marco Sartori
82
	 * @param	mixed	$handled
83
	 * @param	Cerbero\Jobs\Job	$job
84
	 * @return	void
85
	 */
86
	protected function callAfter($handled, $job)
87
	{
88
		$this->callIfExists('after', [$handled, $job]);
89
	}
90
91
}
92