1 <?php
2 
3 namespace Elastica\QueryBuilder;
4 
5 /**
6  * Abstract Version class.
7  *
8  * @author Manuel Andreo Garcia <andreo.garcia@googlemail.com>
9  */
10 abstract class Version
11 {
12     /**
13      * supported query methods.
14      *
15      * @var string[]
16      */
17     protected $queries = [];
18 
19     /**
20      * supported filter methods.
21      *
22      * @var string[]
23      */
24     protected $filters = [];
25 
26     /**
27      * supported aggregation methods.
28      *
29      * @var string[]
30      */
31     protected $aggregations = [];
32 
33     /**
34      * supported $suggester methods.
35      *
36      * @var string[]
37      */
38     protected $suggesters = [];
39 
40     /**
41      * supported methods for field collapsing.
42      *
43      * @var array
44      */
45     protected $collapsers = [];
46 
47     /**
48      * returns true if $name is supported, false otherwise.
49      */
50     public function supports(string $name, string $type): bool
51     {
52         switch ($type) {
53             case DSL::TYPE_QUERY:
54                 return \in_array($name, $this->queries, true);
55             case DSL::TYPE_AGGREGATION:
56                 return \in_array($name, $this->aggregations, true);
57             case DSL::TYPE_SUGGEST:
58                 return \in_array($name, $this->suggesters, true);
59             case DSL::TYPE_COLLAPSE:
60                 return \in_array($name, $this->collapsers, true);
61         }
62 
63         // disables version check in Facade for custom DSL objects
64         return true;
65     }
66 
67     /**
68      * @return string[]
69      */
70     public function getAggregations(): array
71     {
72         return $this->aggregations;
73     }
74 
75     /**
76      * @return string[]
77      */
78     public function getQueries(): array
79     {
80         return $this->queries;
81     }
82 
83     /**
84      * @return string[]
85      */
86     public function getSuggesters(): array
87     {
88         return $this->suggesters;
89     }
90 
91     /**
92      * @return string[]
93      */
94     public function getCollapsers(): array
95     {
96         return $this->collapsers;
97     }
98 }
99