Searcher   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 3
dl 0
loc 59
ccs 15
cts 15
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A search() 0 13 2
A searchForModel() 0 12 3
1
<?php
2
declare(strict_types=1);
3
4
namespace KGzocha\Searcher;
5
6
use KGzocha\Searcher\Context\SearchingContextInterface;
7
use KGzocha\Searcher\CriteriaBuilder\Collection\CriteriaBuilderCollectionInterface;
8
use KGzocha\Searcher\Criteria\Collection\CriteriaCollectionInterface;
9
use KGzocha\Searcher\Criteria\CriteriaInterface;
10
use KGzocha\Searcher\CriteriaBuilder\CriteriaBuilderInterface;
11
12
/**
13
 * Main class responsible for performing actual searching.
14
 *
15
 * @author Krzysztof Gzocha <[email protected]>
16
 */
17
class Searcher implements SearcherInterface
18
{
19
    /**
20
     * @var CriteriaBuilderCollectionInterface
21
     */
22
    private $builders;
23
24
    /**
25
     * @var SearchingContextInterface
26
     */
27
    private $searchingContext;
28
29
    /**
30
     * @param CriteriaBuilderCollectionInterface $builders
31
     * @param SearchingContextInterface          $searchingContext
32
     */
33 1
    public function __construct(
34
        CriteriaBuilderCollectionInterface $builders,
35
        SearchingContextInterface $searchingContext
36
    ) {
37 1
        $this->builders = $builders;
38 1
        $this->searchingContext = $searchingContext;
39 1
    }
40
41
    /**
42
     * {@inheritdoc}
43
     */
44 1
    public function search(
45
        CriteriaCollectionInterface $criteriaCollection
46
    ) {
47
        $builders = $this
48 1
            ->builders
49 1
            ->getCriteriaBuildersForContext($this->searchingContext);
50
51 1
        foreach ($criteriaCollection->getApplicableCriteria() as $criteria) {
52 1
            $this->searchForModel($criteria, $this->searchingContext, $builders);
53
        }
54
55 1
        return $this->searchingContext->getResults();
56
    }
57
58
    /**
59
     * @param CriteriaInterface                  $criteria
60
     * @param SearchingContextInterface          $searchingContext
61
     * @param CriteriaBuilderCollectionInterface $builders
62
     */
63 1
    private function searchForModel(
64
        CriteriaInterface $criteria,
65
        SearchingContextInterface $searchingContext,
66
        CriteriaBuilderCollectionInterface $builders
67
    ) {
68
        /** @var CriteriaBuilderInterface $builder */
69 1
        foreach ($builders as $builder) {
70 1
            if ($builder->allowsCriteria($criteria)) {
71 1
                $builder->buildCriteria($criteria, $searchingContext);
72
            }
73
        }
74 1
    }
75
}
76