Searcher::search()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 6
cts 6
cp 1
rs 9.8333
c 0
b 0
f 0
cc 2
nc 2
nop 1
crap 2
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