Completed
Push — master ( 158f00...4ee9ec )
by San
06:17 queued 02:55
created

JsonInspector   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 6
dl 0
loc 33
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A evaluate() 0 12 3
A validate() 0 7 1
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