Json::getInputObject()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 3
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
3
namespace PhMap\Wrapper;
4
5
use \PhMap\Mapper,
6
    \PhMap\Wrapper,
7
    \PhMap\Mapper\Structure\Object as ObjectMapper,
8
    \PhMap\Exception\InvalidJson;
9
10
/**
11
 * Class Json
12
 * @package PhMap\Wrapper
13
 */
14
class Json extends Wrapper {
15
16
    /**
17
     * @var string
18
     */
19
    private $inputJsonString;
20
21
    /**
22
     * @var object
23
     */
24
    private $inputObject;
25
26
    /**
27
     * @return string
28
     */
29 20
    public function getInputJsonString() {
30 20
        return $this->inputJsonString;
31
    }
32
33
    /**
34
     * @param string $inputJsonString
35
     * @return $this
36
     */
37 1
    public function setInputJsonString($inputJsonString) {
38 1
        if ($this->inputJsonString !== $inputJsonString) {
39 1
            $this->inputJsonString = $inputJsonString;
40
41 1
            $this->createInputObject();
42
43
            /** @var ObjectMapper $mapper */
44 1
            $mapper = $this->getMapper();
45 1
            $mapper->setInputObject($this->getInputObject());
46 1
        }
47
48 1
        return $this;
49
    }
50
51
    /**
52
     * @return object
53
     */
54 19
    private function getInputObject() {
55 19
        return $this->inputObject;
56
    }
57
58
    /**
59
     * @param object $inputObject
60
     * @return $this
61
     */
62 19
    private function setInputObject($inputObject) {
63 19
        $this->inputObject = $inputObject;
64
65 19
        return $this;
66
    }
67
68
    /**
69
     * @param string $inputJsonString
70
     * @param string|object $outputClassOrObject
71
     * @param integer $adapter
72
     */
73 20
    public function __construct(
74
        $inputJsonString,
75
        $outputClassOrObject,
76
        $adapter = Mapper::MEMORY_ANNOTATION_ADAPTER
77
    ) {
78 20
        $this->inputJsonString = $inputJsonString;
79
80 20
        $this->createInputObject()
81 19
            ->createMapper($outputClassOrObject, $adapter);
82 18
    }
83
84
    /**
85
     * @return $this
86
     * @throws InvalidJson
87
     */
88 20
    private function createInputObject() {
89 20
        $object = json_decode($this->getInputJsonString());
90
91 20
        if (is_object($object)) {
92 19
            return $this->setInputObject($object);
93
        }
94
95 1
        throw new InvalidJson($this->getInputJsonString());
96
    }
97
98
    /**
99
     * @param string|object $outputClassOrObject
100
     * @param integer $adapter
101
     * @return $this
102
     */
103 19
    protected function createMapper(
104
        $outputClassOrObject,
105
        $adapter = Mapper::MEMORY_ANNOTATION_ADAPTER
106
    ) {
107 19
        $mapper = new ObjectMapper(
108 19
            $this->getInputObject(),
109 19
            $outputClassOrObject,
110
            $adapter
111 19
        );
112
113 18
        return $this->setMapper($mapper);
114
    }
115
116
}