Passed
Pull Request — master (#75)
by Alexander
36:39 queued 06:28
created

XMLConverter::xml_encode()   B

Complexity

Conditions 10
Paths 11

Size

Total Lines 39
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 28
c 1
b 0
f 0
dl 0
loc 39
rs 7.6666
cc 10
nc 11
nop 3

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Stream\Data;
6
7
class XMLConverter implements Converter
8
{
9
    public function convert($data, array $params = []): string
10
    {
11
        return $this->xml_encode($data);
12
    }
13
14
    private function xml_encode($data, \DOMNode $domElement = null, \DOMDocument $DOMDocument = null): string
15
    {
16
        if ($DOMDocument === null) {
17
            $DOMDocument = new \DOMDocument();
18
            $DOMDocument->formatOutput = true;
19
            $this->xml_encode(['data' => $data], $DOMDocument, $DOMDocument);
20
            return $DOMDocument->saveXML();
21
        }
22
        // To cope with embedded objects
23
        if (is_object($data)) {
24
            $data = get_object_vars($data);
25
        }
26
        if (is_array($data)) {
27
            foreach ($data as $index => $mixedElement) {
28
                if (is_int($index)) {
29
                    if ($index === 0) {
30
                        $node = $domElement;
31
                    } else {
32
                        $node = $DOMDocument->createElement($domElement->tagName);
33
                        $domElement->parentNode->appendChild($node);
34
                    }
35
                } else {
36
                    $plural = $DOMDocument->createElement($index);
37
                    $domElement->appendChild($plural);
0 ignored issues
show
Bug introduced by
The method appendChild() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

37
                    $domElement->/** @scrutinizer ignore-call */ 
38
                                 appendChild($plural);

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
38
                    $node = $plural;
39
                    if (!(rtrim($index, 's') === $index)) {
40
                        $singular = $DOMDocument->createElement(rtrim($index, 's'));
41
                        $plural->appendChild($singular);
42
                        $node = $singular;
43
                    }
44
                }
45
46
                $this->xml_encode($mixedElement, $node, $DOMDocument);
47
            }
48
        } else {
49
            $data = is_bool($data) ? ($data ? 'true' : 'false') : $data;
50
            $domElement->appendChild($DOMDocument->createTextNode($data));
51
        }
52
        return '';
53
    }
54
}
55