JsonObjectType::convertToDatabaseValue()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 6
cts 6
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 2
crap 2
1
<?php
2
3
namespace AurimasNiekis\DoctrineJsonObjectType;
4
5
use Doctrine\DBAL\Types\JsonType;
6
use Doctrine\DBAL\Platforms\AbstractPlatform;
7
use AurimasNiekis\DoctrineJsonObjectType\Exception\{
8
    InvalidValueTypeException,
9
    MissingClassParameterException
10
};
11
12
/**
13
 * Class JsonObjectType
14
 *
15
 * @package AurimasNiekis\DoctrineJsonObjectType
16
 * @author  Aurimas Niekis <[email protected]>
17
 */
18
class JsonObjectType extends JsonType
19
{
20
    const JSON_OBJECT = 'json_object';
21
22
    /**
23
     * @inheritDoc
24
     */
25 1
    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
26
    {
27 1
        return parent::getSQLDeclaration($fieldDeclaration, $platform);
28
    }
29
30
    /**
31
     * @inheritDoc
32
     */
33 3
    public function convertToDatabaseValue($value, AbstractPlatform $platform)
34
    {
35 3
        if (false === ($value instanceof JsonObject)) {
36 1
            throw new InvalidValueTypeException();
37
        }
38
39 2
        $data = $value->jsonSerialize();
40 2
        $data['__class'] = get_class($value);
41
42 2
        return parent::convertToDatabaseValue($data, $platform);
43
    }
44
45
    /**
46
     * @inheritDoc
47
     *
48
     * @throws MissingClassParameterException
49
     */
50 3
    public function convertToPHPValue($value, AbstractPlatform $platform)
51
    {
52 3
        $data = parent::convertToPHPValue($value, $platform);
53
54 3
        if (null === $data) {
55 1
            return null;
56
        }
57
58 2
        if (false === isset($data['__class'])) {
59 1
            throw new MissingClassParameterException();
60
        }
61
62 1
        return call_user_func($data['__class'] . '::fromJson', $data);
63
    }
64
65
    /**
66
     * {@inheritdoc}
67
     */
68 1
    public function getName()
69
    {
70 1
        return self::JSON_OBJECT;
71
    }
72
73
    /**
74
     * @inheritDoc
75
     */
76 1
    public function requiresSQLCommentHint(AbstractPlatform $platform)
77
    {
78 1
        return true;
79
    }
80
}