Passed
Push — master ( 4ee9ec...849354 )
by San
04:18 queued 03:37
created

JsonInspector::validate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 2
1
<?php
2
3
namespace Behatch\Json;
4
5
use JsonSchema\RefResolver;
6
use JsonSchema\Validator;
7
use JsonSchema\Uri\UriRetriever;
8
use Symfony\Component\PropertyAccess\PropertyAccessor;
9
10
class JsonInspector
11
{
12
    private $evaluationMode;
13
14
    private $accessor;
15
16
    public function __construct($evaluationMode)
17
    {
18
        $this->evaluationMode = $evaluationMode;
19
        $this->accessor = new PropertyAccessor(false, true);
20
    }
21
22
    public function evaluate(Json $json, $expression)
23
    {
24
        if ($this->evaluationMode === 'javascript') {
25
            $expression = str_replace('->', '.', $expression);
26
        }
27
28
        try {
29
            return $json->read($expression, $this->accessor);
30
        } catch (\Exception $e) {
31
            throw new \Exception("Failed to evaluate expression '$expression'");
32
        }
33
    }
34
35
    public function validate(Json $json, JsonSchema $schema)
36
    {
37
        return $schema
38
            ->resolve(new RefResolver(new UriRetriever))
39
            ->validate($json, new Validator)
40
        ;
41
    }
42
}
43