StatsFactory::getStatsProvider()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
ccs 5
cts 5
cp 1
crap 1
1
<?php
2
/**
3
 * File: StatsFactory.php
4
 *
5
 * @author      Maciej Sławik <[email protected]>
6
 * Github:      https://github.com/maciejslawik
7
 */
8
9
namespace MSlwk\Otomoto\Middleware\App\Stats;
10
11
use MSlwk\Otomoto\App\Base\UrlProvider;
12
use MSlwk\Otomoto\App\Manufacturer\Url\ManufacturerUrlSuffixProvider;
13
use MSlwk\Otomoto\App\Model\Url\ModelUrlSuffixProvider;
14
use MSlwk\Otomoto\App\Stats\ModelOffersHtmlProvider;
15
use MSlwk\Otomoto\App\Stats\Pager\Pager;
16
use MSlwk\Otomoto\App\Stats\Scrapper\Data\AverageMileageScrapper;
17
use MSlwk\Otomoto\App\Stats\Scrapper\Data\AveragePriceScrapper;
18
use MSlwk\Otomoto\App\Stats\Scrapper\Data\AverageYearScrapper;
19
use MSlwk\Otomoto\App\Stats\Scrapper\StatsHtmlScrapper;
20
use MSlwk\Otomoto\App\Stats\StatsProvider;
21
use MSlwk\Otomoto\Middleware\Slugify\CocurSlugifyAdapter;
22
use MSlwk\Otomoto\Middleware\Webpage\Factory\ReactPHP\ReactPHPAdapterFactory;
23
24
/**
25
 * Class StatsFactory
26
 * @package MSlwk\Otomoto\Middleware\App\Stats
27
 */
28
class StatsFactory
29
{
30
    /**
31
     * @return Stats
32
     */
33 1
    public function create(): Stats
34
    {
35 1
        return new Stats($this->getStatsProvider());
36
    }
37
38
    /**
39
     * @return StatsProvider
40
     */
41 1
    private function getStatsProvider(): StatsProvider
42
    {
43 1
        $htmlProvider = $this->getHtmlProvider();
44 1
        $statsHtmlScrapper = $this->getHtmlScrapper();
45 1
        $statsProvider = new StatsProvider($htmlProvider, $statsHtmlScrapper);
46 1
        return $statsProvider;
47
    }
48
49
    /**
50
     * @return ModelOffersHtmlProvider
51
     */
52 1
    private function getHtmlProvider(): ModelOffersHtmlProvider
53
    {
54 1
        $adapterFactory = new ReactPHPAdapterFactory();
55 1
        $urlProvider = new UrlProvider();
56 1
        $slugifier = new CocurSlugifyAdapter();
57 1
        $manufacuterUrlSuffixProvider = new ManufacturerUrlSuffixProvider($slugifier);
58 1
        $modelUrlSuffixProvider = new ModelUrlSuffixProvider($slugifier);
59 1
        $pager = new Pager();
60 1
        $htmlProvider = new ModelOffersHtmlProvider(
61 1
            $adapterFactory,
62 1
            $urlProvider,
63 1
            $manufacuterUrlSuffixProvider,
64 1
            $modelUrlSuffixProvider,
65 1
            $pager
66
        );
67 1
        return $htmlProvider;
68
    }
69
70
    /**
71
     * @return StatsHtmlScrapper
72
     */
73 1
    private function getHtmlScrapper(): StatsHtmlScrapper
74
    {
75 1
        $mileageScrapper = new AverageMileageScrapper();
76 1
        $priceScrapper = new AveragePriceScrapper();
77 1
        $yearScrapper = new AverageYearScrapper();
78 1
        $statsHtmlScrapper = new StatsHtmlScrapper(
79 1
            $mileageScrapper,
80 1
            $yearScrapper,
81 1
            $priceScrapper
82
        );
83 1
        return $statsHtmlScrapper;
84
    }
85
}
86