Completed
Push — master ( 3fa8fc...dd5833 )
by Alessandro
13s
created

MongoQuerySerializer::prepareItemData()   C

Complexity

Conditions 7
Paths 6

Size

Total Lines 24
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 7.7656

Importance

Changes 1
Bugs 0 Features 1
Metric Value
dl 0
loc 24
ccs 9
cts 12
cp 0.75
rs 6.7272
c 1
b 0
f 1
cc 7
eloc 12
nc 6
nop 1
crap 7.7656
1
<?php declare(strict_types = 1);
2
3
namespace Facile\MongoDbBundle\DataCollector;
4
5
use Facile\MongoDbBundle\Models\Query;
6
7
/**
8
 * Class MongoQuerySerializer
9
 * @internal
10
 */
11
final class MongoQuerySerializer
12
{
13
    /**
14
     * @param Query $query
15
     */
16 1
    public static function serialize(Query $query)
17
    {
18 1
        $query->setFilters(self::prepareUnserializableData($query->getFilters()));
19 1
        $query->setData(self::prepareUnserializableData($query->getData()));
20 1
        $query->setOptions(self::prepareUnserializableData($query->getOptions()));
21 1
    }
22
23
    /**
24
     * @param array|object $data
25
     *
26
     * @return array|object
27
     */
28 1
    private static function prepareUnserializableData($data)
29
    {
30 1
        foreach ($data as $key => $item) {
31 1
            $data[$key] = self::prepareItemData($item);
32
        }
33
34 1
        return $data;
35
    }
36
37
    /**
38
     * @param mixed $item
39
     *
40
     * @return mixed
41
     */
42 1
    private static function prepareItemData($item)
43
    {
44 1
        if (method_exists($item, 'getArrayCopy')) {
45 1
            return self::prepareUnserializableData($item->getArrayCopy());
46
        }
47
48 1
        if (method_exists($item, 'toDateTime')) {
49 1
            return 'ISODate("' . $item->toDateTime()->format('c') . '")';
50
        }
51
52 1
        if (method_exists($item, '__toString')) {
53
            return $item->__toString();
54
        }
55
56 1
        if (method_exists($item, 'bsonSerialize')) {
57
            return $item->bsonSerialize();
58
        }
59
60 1
        if (is_array($item) || is_object($item)) {
61
            return self::prepareUnserializableData((array)$item);
62
        }
63
64 1
        return $item;
65
    }
66
67
}
68