AbstractDelegateContextualHydrator   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 4
dl 0
loc 53
ccs 8
cts 8
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A hydrate() 0 10 3
A __construct() 0 3 1
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
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