Passed
Push — master ( fe617e...bc2c58 )
by Carlos C
14:43 queued 11s
created

Reviewers::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpCfdi\SatCatalogosPopulate\Origins;
6
7
use LogicException;
8
9
class Reviewers
10
{
11
    /** @var ReviewerInterface[] */
12
    private $reviewers;
13
14
    public function __construct(ReviewerInterface ...$reviewers)
15
    {
16
        $this->reviewers = $reviewers;
17
    }
18
19
    public static function createWithDefaultReviewers(ResourcesGatewayInterface $gateway): self
20
    {
21
        return new self(...[
22
            new ConstantReviewer($gateway),
23
            new ScrapingReviewer($gateway),
24
        ]);
25
    }
26
27
    public function review(Origins $origins): Reviews
28
    {
29
        $reviews = [];
30
        foreach ($origins as $origin) {
31
            $reviewer = $this->findReviewerByOrigin($origin);
32
            $reviews[] = $reviewer->review($origin);
33
        }
34
        return new Reviews($reviews);
35
    }
36
37
    public function findReviewerByOrigin(OriginInterface $origin): ReviewerInterface
38
    {
39
        foreach ($this->reviewers as $reviewer) {
40
            if ($reviewer->accepts($origin)) {
41
                return $reviewer;
42
            }
43
        }
44
        throw new LogicException(sprintf('Unable to review an origin of class %s', get_class($origin)));
45
    }
46
}
47