Type   A
last analyzed

Complexity

Total Complexity 28

Size/Duplication

Total Lines 89
Duplicated Lines 0 %

Test Coverage

Coverage 50.79%

Importance

Changes 0
Metric Value
wmc 28
eloc 71
dl 0
loc 89
c 0
b 0
f 0
ccs 32
cts 63
cp 0.5079
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
C readString() 0 38 12
C isValid() 0 38 16
1
<?php
2
3
namespace Swaggest\JsonSchema\Constraint;
4
5
use Swaggest\JsonSchema\Schema;
6
7
class Type implements Constraint
8
{
9
    // TODO deprecate in favour of JsonSchema::<TYPE> ?
10
    const OBJECT = 'object';
11
    const STRING = 'string';
12
    const INTEGER = 'integer';
13
    const NUMBER = 'number';
14
    const ARR = 'array';
15
    const BOOLEAN = 'boolean';
16
    const NULL = 'null';
17
18
    public static function readString($types, &$data)
19
    {
20
        if (!is_array($types)) {
21
            $types = array($types);
22
        }
23
        $ok = false;
24
        foreach ($types as $type) {
25
            switch ($type) {
26
                case self::OBJECT:
27
                    break;
28
                case self::ARR:
29
                    break;
30
                case self::STRING:
31
                    $ok = true;
32
                    break;
33
                case self::NUMBER:
34
                    $newData = filter_var($data, FILTER_VALIDATE_FLOAT, FILTER_NULL_ON_FAILURE);
35
                    $ok = is_float($newData);
36
                    break;
37
                case self::INTEGER:
38
                    $newData = filter_var($data, FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE);
39
                    $ok = is_int($newData);
40
                    break;
41
                case self::BOOLEAN:
42
                    $newData = filter_var($data, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
43
                    $ok = is_bool($newData);
44
                    break;
45
                case self::NULL:
46
                    break;
47
            }
48
            if ($ok) {
49
                if (isset($newData)) {
50
                    $data = $newData;
51
                }
52
                return true;
53
            }
54
        }
55
        return false;
56
    }
57
58 3257
    public static function isValid($types, $data, $version)
59
    {
60 3257
        if (!is_array($types)) {
61 2824
            $types = array($types);
62
        }
63 3257
        $ok = false;
64 3257
        foreach ($types as $type) {
65
            switch ($type) {
66 3257
                case self::OBJECT:
67 3237
                    $ok = is_object($data);
68 3237
                    break;
69 2707
                case self::ARR:
70 899
                    $ok = is_array($data);
71 899
                    break;
72 2579
                case self::STRING:
73 1168
                    $ok = is_string($data);
74 1168
                    break;
75 1748
                case self::INTEGER:
76 753
                    $ok = is_int($data)
77 197
                        || (is_float($data)
78 34
                            && ((ceil($data) === $data && $version !== Schema::VERSION_DRAFT_04) // float without fraction is int
79 753
                                || abs($data) > PHP_INT_MAX)); // big float accepted for int
80 753
                    break;
81 1212
                case self::NUMBER:
82 507
                    $ok = is_int($data) || is_float($data);
83 507
                    break;
84 866
                case self::BOOLEAN:
85 815
                    $ok = is_bool($data);
86 815
                    break;
87 53
                case self::NULL:
88 53
                    $ok = null === $data;
89 53
                    break;
90
            }
91 3257
            if ($ok) {
92 3255
                return true;
93
            }
94
        }
95 696
        return false;
96
    }
97
98
99
}