Passed
Branch reduce-soap-envelope-builder-c... (7c463d)
by Rait
02:53
created

SoapEnvelope   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
c 1
b 0
f 0
dl 0
loc 44
ccs 11
cts 11
cp 1
rs 10
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 3 1
A asStr() 0 22 2
A __construct() 0 3 1
1
<?php
2
3
namespace Raigu\XRoad\SoapEnvelope;
4
5
use Raigu\XRoad\SoapEnvelope\Element\XmlInjectable;
6
7
/**
8
 * I am a SOAP Envelope.
9
 *
10
 * I can return myself as string
11
 */
12
final class SoapEnvelope
13
{
14
    /**
15
     * @var XmlInjectable[]
16
     */
17
    private $elements;
18
19
    /**
20
     * Return SOAP envelope
21
     *
22
     * @return string
23
     */
24 2
    public function asStr(): string
25
    {
26
        $envelope = <<<EOD
27 2
<?xml version="1.0" encoding="UTF-8"?>
28
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" 
29
                   xmlns:id="http://x-road.eu/xsd/identifiers"
30
                   xmlns:xrd="http://x-road.eu/xsd/xroad.xsd">
31
    <env:Header>
32
        <xrd:protocolVersion>4.0</xrd:protocolVersion>
33
    </env:Header>
34
    <env:Body/>
35
</env:Envelope>
36
EOD;
37
38 2
        $dom = new \DOMDocument();
39 2
        $dom->loadXML($envelope);
40
41 2
        foreach ($this->elements as $element) {
42 2
            $element->inject($dom);
43
        }
44
45 2
        return $dom->saveXML();
46
    }
47
48 2
    public static function create(XmlInjectable ...$elements)
49
    {
50 2
        return new self(...$elements);
51
    }
52
53 2
    private function __construct(XmlInjectable ...$elements)
54
    {
55 2
        $this->elements = $elements;
56 2
    }
57
58
59
}
60