ModelProvider::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 5
dl 0
loc 12
rs 10
c 0
b 0
f 0
ccs 6
cts 6
cp 1
crap 1
1
<?php
2
/**
3
 * File: ModelProvider.php
4
 *
5
 * @author      Maciej Sławik <[email protected]>
6
 * Github:      https://github.com/maciejslawik
7
 */
8
9
namespace MSlwk\Otomoto\App\Model;
10
11
use MSlwk\Otomoto\App\Base\UrlPoviderInterface;
12
use MSlwk\Otomoto\App\Manufacturer\Data\ManufacturerDTOInterface;
13
use MSlwk\Otomoto\App\Model\Data\ModelDTOArray;
14
use MSlwk\Otomoto\App\Model\Scrapper\ModelHtmlScrapperInterface;
15
use MSlwk\Otomoto\App\Manufacturer\Url\ManufacturerUrlSuffixProviderInterface;
16
use MSlwk\Otomoto\App\Model\Validator\ModelsScrappedValidatorInterface;
17
use MSlwk\Otomoto\Middleware\Webpage\Data\UrlDTO;
18
use MSlwk\Otomoto\Middleware\Webpage\Data\UrlDTOArray;
19
use MSlwk\Otomoto\Middleware\Webpage\Factory\GETHandlerAdapterFactoryInterface;
20
21
/**
22
 * Class ModelProvider
23
 * @package MSlwk\Otomoto\App\Model
24
 */
25
class ModelProvider
26
{
27
    /**
28
     * @var GETHandlerAdapterFactoryInterface
29
     */
30
    private $adapterFactory;
31
32
    /**
33
     * @var UrlPoviderInterface
34
     */
35
    private $urlPovider;
36
37
    /**
38
     * @var ModelHtmlScrapperInterface
39
     */
40
    private $modelHtmlScrapper;
41
42
    /**
43
     * @var ModelsScrappedValidatorInterface
44
     */
45
    private $modelsScrappedValidator;
46
47
    /**
48
     * @var ManufacturerUrlSuffixProviderInterface
49
     */
50
    private $manufacturerUrlSuffixProvider;
51
52
    /**
53
     * ModelProvider constructor.
54
     * @param GETHandlerAdapterFactoryInterface $adapterFactory
55
     * @param UrlPoviderInterface $urlPovider
56
     * @param ModelHtmlScrapperInterface $modelHtmlScrapper
57
     * @param ModelsScrappedValidatorInterface $modelsScrappedValidator
58
     * @param ManufacturerUrlSuffixProviderInterface $manufacturerUrlSuffixProvider
59
     */
60 2
    public function __construct(
61
        GETHandlerAdapterFactoryInterface $adapterFactory,
62
        UrlPoviderInterface $urlPovider,
63
        ModelHtmlScrapperInterface $modelHtmlScrapper,
64
        ModelsScrappedValidatorInterface $modelsScrappedValidator,
65
        ManufacturerUrlSuffixProviderInterface $manufacturerUrlSuffixProvider
66
    ) {
67 2
        $this->adapterFactory = $adapterFactory;
68 2
        $this->urlPovider = $urlPovider;
69 2
        $this->modelHtmlScrapper = $modelHtmlScrapper;
70 2
        $this->modelsScrappedValidator = $modelsScrappedValidator;
71 2
        $this->manufacturerUrlSuffixProvider = $manufacturerUrlSuffixProvider;
72 2
    }
73
74
    /**
75
     * @param ManufacturerDTOInterface $manufacturer
76
     * @return ModelDTOArray
77
     */
78 1
    public function getModels(ManufacturerDTOInterface $manufacturer): ModelDTOArray
79
    {
80 1
        $GETAdapter = $this->adapterFactory->create();
81
82 1
        $url = $this->urlPovider->getBaseUrl() . $this->manufacturerUrlSuffixProvider->getUrlSuffix($manufacturer);
83 1
        $urlDTO = new UrlDTO($url);
84 1
        $urlDTOArray = new UrlDTOArray($urlDTO);
85 1
        $homepageHtmlDTO = $GETAdapter->getWebpages($urlDTOArray)->current();
86
87 1
        $models = $this->modelHtmlScrapper->scrapModels($homepageHtmlDTO->getHtml());
88
89 1
        $this->modelsScrappedValidator->validate($models);
90
91 1
        return $models;
92
    }
93
}
94