1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* Incoming |
4
|
|
|
* |
5
|
|
|
* @author Trevor Suarez (Rican7) |
6
|
|
|
* @copyright (c) Trevor Suarez |
7
|
|
|
* @link https://github.com/Rican7/incoming |
8
|
|
|
* @license MIT |
9
|
|
|
*/ |
10
|
|
|
|
11
|
|
|
declare(strict_types=1); |
12
|
|
|
|
13
|
|
|
namespace Incoming\Hydrator; |
14
|
|
|
|
15
|
|
|
use Incoming\Structure\Map; |
16
|
|
|
|
17
|
|
|
/** |
18
|
|
|
* An abstract, context enabled extension of the `AbstractDelegateHydrator`. |
19
|
|
|
* |
20
|
|
|
* @see AbstractDelegateHydrator |
21
|
|
|
*/ |
22
|
|
View Code Duplication |
abstract class AbstractDelegateContextualHydrator extends AbstractDelegateHydrator implements ContextualHydrator |
|
|
|
|
23
|
|
|
{ |
24
|
|
|
|
25
|
|
|
/** |
26
|
|
|
* Properties |
27
|
|
|
*/ |
28
|
|
|
|
29
|
|
|
/** |
30
|
|
|
* Whether or not to provide a fallback empty context, when a `null` context |
31
|
|
|
* is otherwise provided, to make processes simpler by not having to rely on |
32
|
|
|
* null checks of the actual parameter before usage. |
33
|
|
|
* |
34
|
|
|
* @var bool |
35
|
|
|
*/ |
36
|
|
|
private $provide_fallback_context = false; |
37
|
|
|
|
38
|
|
|
|
39
|
|
|
/** |
40
|
|
|
* Methods |
41
|
|
|
*/ |
42
|
|
|
|
43
|
|
|
/** |
44
|
|
|
* Constructor |
45
|
|
|
* |
46
|
|
|
* @param bool $provide_fallback_context Whether or not to provide a |
47
|
|
|
* fallback empty context, when a `null` context is otherwise provided, to |
48
|
|
|
* make processes simpler by not having to rely on null checks of the |
49
|
|
|
* actual parameter before usage. |
50
|
|
|
*/ |
51
|
6 |
|
protected function __construct(bool $provide_fallback_context = false) |
52
|
|
|
{ |
53
|
6 |
|
$this->provide_fallback_context = $provide_fallback_context; |
54
|
6 |
|
} |
55
|
|
|
|
56
|
|
|
/** |
57
|
|
|
* {@inheritdoc} |
58
|
|
|
* |
59
|
|
|
* @param mixed $incoming The input data. |
60
|
|
|
* @param mixed $model The model to hydrate. |
61
|
|
|
* @param Map|null $context An optional generic key-value map, for providing |
62
|
|
|
* contextual values during the hydrate process. |
63
|
|
|
* @return mixed The hydrated model. |
64
|
|
|
*/ |
65
|
6 |
|
public function hydrate($incoming, $model, Map $context = null) |
66
|
|
|
{ |
67
|
6 |
|
$callable = $this->getDelegate(); |
68
|
|
|
|
69
|
6 |
|
if (null === $context && $this->provide_fallback_context) { |
70
|
|
|
// Provide a non-null context so null checks aren't later required |
71
|
3 |
|
$context = new Map(); |
72
|
|
|
} |
73
|
|
|
|
74
|
6 |
|
return $callable($incoming, $model, $context); |
75
|
|
|
} |
76
|
|
|
} |
77
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.