Completed
Push — master ( 460573...0d2a4c )
by Matt
03:30
created

Util::loadPath()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Yuloh\JsonGuardCli;
4
5
use League\JsonGuard;
6
use League\JsonGuard\ValidationError;
7
use Seld\JsonLint\JsonParser;
8
use Symfony\Component\Console\Helper\Table;
9
10
class Util
11
{
12
    public static function printableErrors(array $errors)
13
    {
14 9
        return array_map(function (ValidationError $error) {
15
            return [
16 9
                $error->getKeyword(),
17 9
                $error->getMessage(),
18 9
                $error->getPointer(),
19 9
                static::truncate(json_encode($error->getValue())),
20 9
            ];
21 9
        }, $errors);
22
    }
23
24 42
    public static function loadJson($json)
25
    {
26
        // If it's a loader path just load it since we can't lint that.
27 42
        if (static::isLoaderPath($json)) {
28 12
            return static::loadPath($json);
29 33
        } elseif (file_exists($json)) {
30 21
            $json = file_get_contents($json);
31 33
        } elseif ($json === '-') {
32
            $json = static::getStdin();
33
        }
34
35 33
        if ($parseException = (new JsonParser())->lint($json)) {
36 6
            throw $parseException;
37
        }
38
39 30
        return JsonGuard\json_decode($json, false, 512, JSON_BIGINT_AS_STRING);
40
    }
41
42 9
    public static function renderErrorTable($output, $errors)
43
    {
44 9
        (new Table($output))
45 9
            ->setHeaders(['Keyword', 'Message', 'Pointer', 'Value'])
46 9
            ->setRows(static::printableErrors($errors))
47 9
            ->render();
48 9
    }
49
50 42
    public static function isLoaderPath($path)
51
    {
52 42
        return preg_match('#^[^{\n\r]+\:\/\/[^}\n\r]*#', $path);
53
    }
54
55 18
    public static function schemaPath($file = '')
56
    {
57 18
        return realpath(__DIR__ . '/../schema/' . $file);
58
    }
59
60 12
    public static function loadPath($path)
61
    {
62 12
        list($prefix, $path) = explode('://', $path, 2);
63
64 12
        $loader = (new JsonGuard\Dereferencer())->getLoader($prefix);
65
66 12
        return $loader->load($path);
67
    }
68
69 9
    public static function truncate($string, $limit = 100)
70
    {
71 9
       if (strlen($string) <= $limit) {
72 9
           return $string;
73
       }
74
75
       return substr($string, 0, $limit) . '...';
76
    }
77
78
    public static function getStdin()
79
    {
80
        $json = '';
81
        $fh   = fopen('php://stdin','r');
82
        while($line = fgets($fh)) {
83
            $json .= $line;
84
        }
85
        return $json;
86
    }
87
}
88