1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Rb\Specification\Doctrine; |
4
|
|
|
|
5
|
|
|
/** |
6
|
|
|
* Class SpecificationFactory. |
7
|
|
|
*/ |
8
|
|
|
class SpecificationFactory |
9
|
|
|
{ |
10
|
|
|
/** |
11
|
|
|
* Specification map. |
12
|
|
|
* |
13
|
|
|
* @var array |
14
|
|
|
*/ |
15
|
|
|
static protected $supportedSpecifications = [ |
16
|
|
|
'Between' => 'Rb\Specification\Doctrine\Condition\Between', |
17
|
|
|
'Comparison' => 'Rb\Specification\Doctrine\Condition\Comparison', |
18
|
|
|
'Equals' => 'Rb\Specification\Doctrine\Condition\Equals', |
19
|
|
|
'EqualsProperty' => 'Rb\Specification\Doctrine\Condition\EqualsProperty', |
20
|
|
|
'GreaterThan' => 'Rb\Specification\Doctrine\Condition\GreaterThan', |
21
|
|
|
'GreaterThanOrEquals' => 'Rb\Specification\Doctrine\Condition\GreaterThanOrEquals', |
22
|
|
|
'In' => 'Rb\Specification\Doctrine\Condition\In', |
23
|
|
|
'IsInstanceOf' => 'Rb\Specification\Doctrine\Condition\IsInstanceOf', |
24
|
|
|
'IsNotNull' => 'Rb\Specification\Doctrine\Condition\IsNotNull', |
25
|
|
|
'IsNull' => 'Rb\Specification\Doctrine\Condition\IsNull', |
26
|
|
|
'LessThan' => 'Rb\Specification\Doctrine\ConditionLessThan', |
27
|
|
|
'LessThanOrEquals' => 'Rb\Specification\Doctrine\Condition\LessThanOrEquals', |
28
|
|
|
'Like' => 'Rb\Specification\Doctrine\Condition\Like', |
29
|
|
|
'NotEquals' => 'Rb\Specification\Doctrine\Condition\NotEquals', |
30
|
|
|
'NotIn' => 'Rb\Specification\Doctrine\Condition\NotIn', |
31
|
|
|
|
32
|
|
|
'AndX' => 'Rb\Specification\Doctrine\Logic\AndX', |
33
|
|
|
'Not' => 'Rb\Specification\Doctrine\Logic\Not', |
34
|
|
|
'OrX' => 'Rb\Specification\Doctrine\Logic\OrX', |
35
|
|
|
|
36
|
|
|
'GroupBy' => 'Rb\Specification\Doctrine\Query\GroupBy', |
37
|
|
|
'Having' => 'Rb\Specification\Doctrine\Query\Having', |
38
|
|
|
'IndexBy' => 'Rb\Specification\Doctrine\Query\IndexBy', |
39
|
|
|
'InnerJoin' => 'Rb\Specification\Doctrine\Query\InnerJoin', |
40
|
|
|
'Join' => 'Rb\Specification\Doctrine\Query\Join', |
41
|
|
|
'LeftJoin' => 'Rb\Specification\Doctrine\Query\LeftJoin', |
42
|
|
|
'OrderBy' => 'Rb\Specification\Doctrine\Query\OrderBy', |
43
|
|
|
'Select' => 'Rb\Specification\Doctrine\Query\Select', |
44
|
|
|
]; |
45
|
|
|
|
46
|
|
|
/** |
47
|
|
|
* @param string $name |
48
|
|
|
* @param array $arguments |
49
|
|
|
* |
50
|
|
|
* @throws \InvalidArgumentException |
51
|
|
|
* |
52
|
|
|
* @return SpecificationInterface |
53
|
|
|
*/ |
54
|
|
|
static public function __callStatic($name, $arguments) |
|
|
|
|
55
|
|
|
{ |
56
|
|
|
if (!in_array($name, self::$supportedSpecifications)) { |
57
|
|
|
throw new \InvalidArgumentException( |
58
|
|
|
sprintf('Specification %s is not supported', $name) |
59
|
|
|
); |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
$reflect = new \ReflectionClass(self::$supportedSpecifications[$name]); |
63
|
|
|
|
64
|
|
|
return $reflect->newInstanceArgs($arguments); |
65
|
|
|
} |
66
|
|
|
} |
67
|
|
|
|