QuerySerializer   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 53
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
wmc 9
c 1
b 0
f 1
lcom 1
cbo 3
dl 0
loc 53
ccs 21
cts 21
cp 1
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A isSerializerFor() 0 3 2
A serialize() 0 10 2
A getSerialized() 0 7 2
A serializeQueries() 0 9 2
1
<?php
2
3
namespace WikidataQueryApi\Query\Serializers;
4
5
use Serializers\DispatchableSerializer;
6
use Serializers\Exceptions\UnsupportedObjectException;
7
use Serializers\Serializer;
8
use WikidataQueryApi\Query\AbstractQuery;
9
use WikidataQueryApi\Query\CollectionQuery;
10
11
/**
12
 * @licence GPLv2+
13
 * @author Thomas Pellissier Tanon
14
 */
15
class QuerySerializer implements DispatchableSerializer {
16
17
	/**
18
	 * @var Serializer
19
	 */
20
	private $commandsSerializer;
21
22
	/**
23
	 * @param Serializer $commandsSerializer
24
	 */
25 9
	public function __construct( Serializer $commandsSerializer ) {
26 9
		$this->commandsSerializer = $commandsSerializer;
27 9
	}
28
29
	/**
30
	 * @see DispatchableSerializer::isSerializerFor
31
	 */
32 8
	public function isSerializerFor( $object ) {
33 8
		return is_object( $object ) && $object instanceof AbstractQuery;
34
	}
35
36
	/**
37
	 * @see Serializer::serialize
38
	 */
39 4
	public function serialize( $object ) {
40 4
		if ( !$this->isSerializerFor( $object ) ) {
41 2
			throw new UnsupportedObjectException(
42 2
				$object,
43
				'QuerySerializer can only serialize AbstractQuery objects'
44 2
			);
45
		}
46
47 2
		return $this->getSerialized( $object );
48
	}
49
50 2
	private function getSerialized( AbstractQuery $query ) {
51 2
		if ( $query instanceof CollectionQuery ) {
52 1
			return '(' . implode( ' ' . $query->getType() . ' ', $this->serializeQueries( $query->getSubQueries() ) ) . ')';
53
		}
54
55 2
		return $this->commandsSerializer->serialize( $query );
56
	}
57
58 1
	private function serializeQueries( array $queries ) {
59 1
		$serialized = [];
60
61 1
		foreach( $queries as $query ) {
62 1
			$serialized[] = $this->getSerialized( $query );
63 1
		}
64
65 1
		return $serialized;
66
	}
67
}