Passed
Pull Request — master (#20)
by Viacheslav
02:54
created

Properties::lock()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
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 Swaggest\JsonSchema\Constraint;
4
5
use Swaggest\JsonSchema\Exception;
6
use Swaggest\JsonSchema\Schema;
7
use Swaggest\JsonSchema\SchemaContract;
8
use Swaggest\JsonSchema\Structure\Egg;
9
use Swaggest\JsonSchema\Structure\Nested;
10
use Swaggest\JsonSchema\Structure\ObjectItem;
11
12
/**
13
 * @method SchemaContract __get($key)
14
 * @method Schema[] toArray()
15
 */
16
class Properties extends ObjectItem implements Constraint
17
{
18
    private $__isReadOnly = false;
19
20
    /** @var Schema[] */
21
    protected $__arrayOfData = array();
22
23
    /** @var Schema */
24
    protected $__schema;
25
26 6
    public function lock()
27
    {
28 6
        $this->__isReadOnly = true;
29 6
        return $this;
30
    }
31
32
    /**
33
     * @param string $name
34
     * @param mixed $column
35
     * @return $this|static
36
     * @throws Exception
37
     */
38 14
    public function __set($name, $column)
39
    {
40 14
        if ($this->__isReadOnly) {
41
            throw new Exception('Trying to modify read-only Properties');
42
        }
43 14
        if ($column instanceof Nested) {
44 4
            $this->addNested($column->schema, $name);
45 4
            return $this;
46
        }
47 12
        parent::__set($name, $column);
48 12
        return $this;
49
    }
50
51 3
    public static function create()
52
    {
53 3
        return new static;
54
    }
55
56
    /** @var Schema|null */
57
    private $additionalProperties;
0 ignored issues
show
introduced by
The private property $additionalProperties is not used, and could be removed.
Loading history...
58
59
    /** @var Egg[][] */
60
    public $nestedProperties = array();
61
62
    /** @var string[] */
63
    public $nestedPropertyNames = array();
64
65
    /**
66
     * @param SchemaContract $nested
67
     * @param string $name
68
     * @return $this
69
     * @throws Exception
70
     */
71 4
    protected function addNested(SchemaContract $nested, $name)
72
    {
73 4
        if ($this->__isReadOnly) {
74
            throw new Exception('Trying to modify read-only Properties');
75
        }
76 4
        if (null === $nested->getProperties()) {
77
            throw new Exception('Schema with properties required', Exception::PROPERTIES_REQUIRED);
78
        }
79 4
        $this->nestedPropertyNames[$name] = $name;
80 4
        foreach ($nested->getProperties()->toArray() as $propertyName => $property) {
81 4
            $this->nestedProperties[$propertyName][] = new Egg($nested, $name, $property);
82
        }
83 4
        return $this;
84
    }
85
86
    /**
87
     * @return Egg[][]
88
     */
89
    public function getNestedProperties()
90
    {
91
        return $this->nestedProperties;
92
    }
93
}