VersionNormalizer::normalizeVersion()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2.5

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 3
cts 6
cp 0.5
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 7
nc 2
nop 2
crap 2.5
1
<?php
2
3
namespace Buttress\Browserslist\Browser;
4
5
use Buttress\Browserslist\Browserslist;
6
7
class VersionNormalizer
8
{
9
    /** @var \Buttress\Browserslist\Browserslist */
10
    protected $list;
11
12 1
    public function __construct(Browserslist $list)
13
    {
14 1
        $this->list = $list;
15 1
    }
16
17
    /**
18
     * Take a version string and return the normalized version.
19
     * This method uses the browserlist's main data and version alias data
20
     * to resolve the proper version from an alias.
21
     *
22
     * @param $browserName
23
     * @param $browserVersion
24
     * @return null|string
25
     */
26 1
    public function normalizeVersion($browserName, $browserVersion)
27
    {
28 1
        $data = $this->list->getDataByBrowser($browserName);
29
30 1
        if ($version = $this->getVersionFromData($data, $browserVersion)) {
31
            return $version;
32
        } else {
33
            $aliases = $this->list->getVersionAliases()->get($data['name'], []);
34
            return $this->getVersionFromAliases($aliases, $browserVersion);
35
        }
36
    }
37
38
    /**
39
     * @param $data
40
     * @param $version
41
     * @return string|null
42
     */
43 1
    private function getVersionFromData($data, $version)
44
    {
45 1
        $versions = array_get($data, 'versions', []);
46
        if (in_array($version, $versions)) {
47
            return $this->resolveRealVersion($versions, $version);
48
        }
49
    }
50
51
    /**
52
     * @param array $versions
53
     * @param $version
54
     * @return string|null
55
     */
56
    private function resolveRealVersion(array $versions, $version)
57
    {
58
        foreach ($versions as $realVersion) {
59
            if ($version == $realVersion) {
60
                return $realVersion;
61
            }
62
        }
63
    }
64
65
    /**
66
     * @param array $aliases
67
     * @param $version
68
     * @return string
69
     */
70
    private function getVersionFromAliases(array $aliases, $version)
71
    {
72
        if (isset($aliases[$version])) {
73
            return $aliases[$version];
74
        }
75
    }
76
}
77