Hydrate::hasFacade()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 4
ccs 0
cts 0
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Dgame\Soap\Hydrator;
4
5
use Dgame\Object\ObjectFacade;
6
use Dgame\Soap\Element;
7
use Dgame\Variants\Variants;
8
use Monolog\Handler\NullHandler;
9
use Monolog\Logger;
10
use Monolog\Registry;
11
12
/**
13
 * Class Hydrate
14
 * @package Dgame\Soap\Hydrator
15
 */
16
final class Hydrate
17
{
18
    /**
19
     * @var ObjectFacade
20
     */
21
    private $facade;
22
    /**
23
     * @var Element
24
     */
25 9
    private $element;
26
27 9
    /**
28
     * Hydrate constructor.
29 9
     *
30 9
     * @param ClassMapper $mapper
31
     * @param Element     $element
32
     */
33
    public function __construct(ClassMapper $mapper, Element $element)
34
    {
35
        $object = $mapper->new($element->getName());
36
        if ($object !== null) {
37
            $this->facade = new ObjectFacade($object);
38 9
        }
39
40 9
        $this->element = $element;
41
42
        self::verifyLoggerPresence();
43
    }
44
45
    /**
46
     *
47
     */
48 5
    private static function verifyLoggerPresence()
49
    {
50 5
        if (!Registry::hasLogger(Hydrator::class)) {
51 5
            $log = new Logger(Hydrator::class);
52 5
            $log->pushHandler(new NullHandler());
53
            Registry::addLogger($log);
54
        }
55
    }
56
57
    /**
58
     * @return ObjectFacade
59
     */
60
    public function getFacade(): ObjectFacade
61
    {
62
        if (!$this->hasFacade()) {
63
            Registry::getInstance(Hydrator::class)->error('Invalid Hydrate in use');
64 8
        }
65
66 8
        return $this->facade;
67 8
    }
68
69
    /**
70 1
     * @return Element
71
     */
72
    public function getElement(): Element
73
    {
74
        return $this->element;
75
    }
76 5
77
    /**
78 5
     * @return bool
79
     */
80
    public function hasFacade(): bool
81
    {
82
        return $this->facade !== null;
83
    }
84 5
85
    /**
86 5
     * @param string $name
87
     * @param        $value
88
     */
89
    public function assign(string $name, $value)
90
    {
91
        if (!$this->getFacade()->setValue($name, $value)) {
92
            Registry::getInstance(Hydrator::class)->warning(
93
                'Could not assign value {value} of {name}',
94
                ['value' => var_export($value, true), 'name' => $name]
95
            );
96
        }
97
    }
98
99
    /**
100
     * @param Hydrate $hydrate
0 ignored issues
show
Documentation introduced by
Should the type for parameter $hydrate not be \self?

This check looks for @param annotations where the type inferred by our type inference engine differs from the declared type.

It makes a suggestion as to what type it considers more descriptive.

Most often this is a case of a parameter that can be null in addition to its declared types.

Loading history...
101
     */
102
    public function append(self $hydrate)
103
    {
104
        $facade  = $hydrate->getFacade();
105
        $class   = $facade->getReflection()->getShortName();
106
        $element = $hydrate->getElement()->getName();
107
108
        foreach (Variants::ofArguments($class, $element)->withCamelSnakeCase() as $name) {
109
            if ($this->getFacade()->setValue($name, $facade->getObject())) {
110
                return;
111
            }
112
        }
113
114
        Registry::getInstance(Hydrator::class)->warning(
115
            'Could not append object {name}',
116
            ['name' => $element]
117
        );
118
    }
119
}