AbstractDelegateContextualBuilder   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A build() 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 `AbstractDelegateBuilder`.
19
 *
20
 * @see AbstractDelegateBuilder
21
 */
22
abstract class AbstractDelegateContextualBuilder extends AbstractDelegateBuilder implements ContextualBuilder
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 Map|null $context An optional generic key-value map, for providing
61
     *  contextual values during the build process.
62
     * @return mixed The built model.
63
     */
64 6
    public function build($incoming, Map $context = null)
65
    {
66 6
        $callable = $this->getDelegate();
67
68 6
        if (null === $context && $this->provide_fallback_context) {
69
            // Provide a non-null context so null checks aren't later required
70 3
            $context = new Map();
71
        }
72
73 6
        return $callable($incoming, $context);
74
    }
75
}
76