Test Failed
Push — alt-path-loader ( dd5973 )
by Guido
07:14
created

Builder   C

Complexity

Total Complexity 16

Size/Duplication

Total Lines 175
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 19

Importance

Changes 0
Metric Value
dl 0
loc 175
rs 6.875
c 0
b 0
f 0
wmc 16
lcom 2
cbo 19

13 Methods

Rating   Name   Duplication   Size   Complexity  
A table() 0 10 1
A entity() 0 10 1
A inheritance() 0 8 1
A singleTableInheritance() 0 4 1
A joinedTableInheritance() 0 4 1
A embed() 0 13 1
A override() 0 13 1
A events() 0 8 1
A listen() 0 8 1
A isEmbeddedClass() 0 4 1
A setArray() 0 4 1
A __call() 0 13 3
A disallowInEmbeddedClasses() 0 6 2
1
<?php
2
3
namespace LaravelDoctrine\Fluent\Builders;
4
5
use Doctrine\DBAL\Types\Type;
6
use InvalidArgumentException;
7
use LaravelDoctrine\Fluent\Extensions\Gedmo\GedmoBuilderHints;
8
use LaravelDoctrine\Fluent\Fluent;
9
use LogicException;
10
11
/**
12
 * @method Field array($name, callable $callback = null)
13
 */
14
class Builder extends AbstractBuilder implements Fluent
15
{
16
    use Traits\Fields;
17
    use Traits\Dates;
18
    use Traits\Aliases;
19
    use Traits\Relations;
20
    use Traits\Constraints;
21
    use Traits\Macroable;
22
    use Traits\Queueable;
23
    use Traits\QueuesMacros;
24
    use GedmoBuilderHints;
25
26
    /**
27
     * {@inheritdoc}
28
     */
29
    public function table($name, callable $callback = null)
30
    {
31
        $this->disallowInEmbeddedClasses();
32
33
        $table = new Table($this->builder, $name);
34
35
        $this->callbackAndQueue($table, $callback);
36
37
        return $table;
38
    }
39
40
    /**
41
     * {@inheritdoc}
42
     */
43
    public function entity(callable $callback = null)
44
    {
45
        $this->disallowInEmbeddedClasses();
46
47
        $entity = new Entity($this->builder, $this->namingStrategy);
48
49
        $this->callIfCallable($callback, $entity);
50
51
        return $entity;
52
    }
53
54
    /**
55
     * {@inheritdoc}
56
     */
57
    public function inheritance($type, callable $callback = null)
58
    {
59
        $inheritance = Inheritance\InheritanceFactory::create($type, $this->builder);
60
61
        $this->callIfCallable($callback, $inheritance);
62
63
        return $inheritance;
64
    }
65
66
    /**
67
     * {@inheritdoc}
68
     */
69
    public function singleTableInheritance(callable $callback = null)
70
    {
71
        return $this->inheritance(Inheritance\Inheritance::SINGLE, $callback);
72
    }
73
74
    /**
75
     * {@inheritdoc}
76
     */
77
    public function joinedTableInheritance(callable $callback = null)
78
    {
79
        return $this->inheritance(Inheritance\Inheritance::JOINED, $callback);
80
    }
81
82
    /**
83
     * {@inheritdoc}
84
     */
85
    public function embed($embeddable, $field = null, callable $callback = null)
86
    {
87
        $embedded = new Embedded(
88
            $this->builder,
89
            $this->namingStrategy,
90
            $this->guessSingularField($embeddable, $field),
91
            $embeddable
92
        );
93
94
        $this->callbackAndQueue($embedded, $callback);
95
96
        return $embedded;
97
    }
98
99
    /**
100
     * {@inheritdoc}
101
     */
102
    public function override($name, callable $callback)
103
    {
104
        $override = new Overrides\Override(
105
            $this->getBuilder(),
106
            $this->getNamingStrategy(),
107
            $name,
108
            $callback
109
        );
110
111
        $this->queue($override);
112
113
        return $override;
114
    }
115
116
    /**
117
     * {@inheritdoc}
118
     */
119
    public function events(callable $callback = null)
120
    {
121
        $events = new LifecycleEvents($this->builder);
122
123
        $this->callbackAndQueue($events, $callback);
124
125
        return $events;
126
    }
127
128
    /**
129
     * {@inheritdoc}
130
     */
131
    public function listen(callable $callback = null)
132
    {
133
        $events = new EntityListeners($this->builder);
134
135
        $this->callbackAndQueue($events, $callback);
136
137
        return $events;
138
    }
139
140
    /**
141
     * {@inheritdoc}
142
     */
143
    public function isEmbeddedClass()
144
    {
145
        return $this->builder->getClassMetadata()->isEmbeddedClass;
146
    }
147
148
    /**
149
     * @param string        $name
150
     * @param callable|null $callback
151
     *
152
     * @return Field
153
     */
154
    protected function setArray($name, callable $callback = null)
155
    {
156
        return $this->field(Type::TARRAY, $name, $callback);
157
    }
158
159
    /**
160
     * @param string $method
161
     * @param array  $params
162
     *
163
     * @return mixed
164
     */
165
    public function __call($method, $params)
166
    {
167
        // Workaround for reserved keywords
168
        if ($method === 'array') {
169
            return call_user_func_array([$this, 'setArray'], $params);
170
        }
171
172
        if ($this->hasMacro($method)) {
173
            return $this->queueMacro($method, $params);
174
        }
175
176
        throw new InvalidArgumentException('Fluent builder method ['.$method.'] does not exist');
177
    }
178
179
    /**
180
     * {@inheritdoc}
181
     */
182
    protected function disallowInEmbeddedClasses($message = '')
183
    {
184
        if ($this->isEmbeddedClass()) {
185
            throw new LogicException($message);
186
        }
187
    }
188
}
189