Passed
Push — master ( 0971b0...b7d7cf )
by Kirill
03:21
created

SchemaDefinition::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 3
crap 2
1
<?php
2
/**
3
 * This file is part of Railt package.
4
 *
5
 * For the full copyright and license information, please view the LICENSE
6
 * file that was distributed with this source code.
7
 */
8
declare(strict_types=1);
9
10
namespace Railt\Reflection\Definition;
11
12
use Railt\Reflection\AbstractTypeDefinition;
13
use Railt\Reflection\Contracts\Definition\ObjectDefinition;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, Railt\Reflection\Definition\ObjectDefinition.

Let’s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let’s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
14
use Railt\Reflection\Contracts\Definition\SchemaDefinition as SchemaDefinitionInterface;
15
use Railt\Reflection\Contracts\Definition\TypeDefinition;
16
use Railt\Reflection\Contracts\Type as TypeInterface;
17
use Railt\Reflection\Document;
18
use Railt\Reflection\Type;
19
20
/**
21
 * Class SchemaDefinition
22
 */
23
class SchemaDefinition extends AbstractTypeDefinition implements SchemaDefinitionInterface
24
{
25
    /**
26
     * @var string
27
     */
28
    protected $query;
29
30
    /**
31
     * @var string|null
32
     */
33
    protected $mutation;
34
35
    /**
36
     * @var string|null
37
     */
38
    protected $subscription;
39
40
    /**
41
     * SchemaDefinition constructor.
42
     * @param Document $document
43
     * @param string $queryType
44
     * @param string|null $name
45
     */
46
    public function __construct(Document $document, string $queryType, string $name = null)
47
    {
48
        $this->query = $queryType;
49
50
        parent::__construct($document, $name ?? self::DEFAULT_SCHEMA_NAME);
51
    }
52
53
    /**
54
     * @return TypeInterface
55
     */
56 8
    public static function getType(): TypeInterface
57
    {
58 8
        return Type::of(Type::SCHEMA);
59
    }
60
61
    /**
62
     * @param ObjectDefinition $query
63
     * @return SchemaDefinition
64
     */
65
    public function withQuery(ObjectDefinition $query): SchemaDefinition
66
    {
67
        $this->query = $query->getName();
68
69
        return $this;
70
    }
71
72
    /**
73
     * @return ObjectDefinition|TypeDefinition
74
     */
75
    public function getQuery(): ObjectDefinition
76
    {
77
        return $this->fetch($this->query);
78
    }
79
80
    /**
81
     * @param ObjectDefinition|null $mutation
82
     * @return SchemaDefinition
83
     */
84
    public function withMutation(?ObjectDefinition $mutation): SchemaDefinition
85
    {
86
        $this->mutation = $mutation ? $mutation->getName() : null;
87
88
        return $this;
89
    }
90
91
    /**
92
     * @return null|ObjectDefinition|TypeDefinition
93
     * @throws \Railt\Io\Exception\ExternalFileException
94
     */
95
    public function getMutation(): ?ObjectDefinition
96
    {
97
        return $this->fetchOrNull($this->mutation);
98
    }
99
100
    /**
101
     * @return bool
102
     */
103
    public function hasMutation(): bool
104
    {
105
        return $this->mutation !== null;
106
    }
107
108
    /**
109
     * @param ObjectDefinition|null $subscription
110
     * @return SchemaDefinition
111
     */
112
    public function withSubscription(?ObjectDefinition $subscription): SchemaDefinition
113
    {
114
        $this->subscription = $subscription ? $subscription->getName() : null;
115
116
        return $this;
117
    }
118
119
    /**
120
     * @return null|ObjectDefinition|TypeDefinition
121
     * @throws \Railt\Io\Exception\ExternalFileException
122
     */
123
    public function getSubscription(): ?ObjectDefinition
124
    {
125
        return $this->fetchOrNull($this->subscription);
126
    }
127
128
    /**
129
     * @return bool
130
     */
131
    public function hasSubscription(): bool
132
    {
133
        return $this->subscription !== null;
134
    }
135
}
136