GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 96f191...a0fbd6 )
by Martin
06:51
created

WhichBrowser::hydrateBrowser()   B

Complexity

Conditions 5
Paths 4

Size

Total Lines 20
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 5

Importance

Changes 3
Bugs 0 Features 0
Metric Value
c 3
b 0
f 0
dl 0
loc 20
ccs 11
cts 11
cp 1
rs 8.8571
cc 5
eloc 10
nc 4
nop 2
crap 5
1
<?php
2
namespace UserAgentParser\Provider;
3
4
use UserAgentParser\Exception\NoResultFoundException;
5
use UserAgentParser\Exception\PackageNotLoadedException;
6
use UserAgentParser\Model;
7
use WhichBrowser\Parser as WhichBrowserParser;
8
9
/**
10
 * Abstraction for whichbrowser/parser
11
 *
12
 * @author Martin Keckeis <[email protected]>
13
 * @author Niels Leenheer <[email protected]>
14
 * @license MIT
15
 * @see https://github.com/WhichBrowser/Parser
16
 */
17
class WhichBrowser extends AbstractProvider
18
{
19
    /**
20
     * Name of the provider
21
     *
22
     * @var string
23
     */
24
    protected $name = 'WhichBrowser';
25
26
    /**
27
     * Homepage of the provider
28
     *
29
     * @var string
30
     */
31
    protected $homepage = 'https://github.com/WhichBrowser/Parser';
32
33
    /**
34
     * Composer package name
35
     *
36
     * @var string
37
     */
38
    protected $packageName = 'whichbrowser/parser';
39
40
    protected $detectionCapabilities = [
41
42
        'browser' => [
43
            'name'    => true,
44
            'version' => true,
45
        ],
46
47
        'renderingEngine' => [
48
            'name'    => true,
49
            'version' => true,
50
        ],
51
52
        'operatingSystem' => [
53
            'name'    => true,
54
            'version' => true,
55
        ],
56
57
        'device' => [
58
            'model'    => true,
59
            'brand'    => true,
60
            'type'     => true,
61
            'isMobile' => true,
62
            'isTouch'  => false,
63
        ],
64
65
        'bot' => [
66
            'isBot' => true,
67
            'name'  => true,
68
            'type'  => false,
69
        ],
70
    ];
71
72
    /**
73
     * Used for unitTests mocking
74
     *
75
     * @var WhichBrowserParser
76
     */
77
    private $parser;
78
79
    /**
80
     * 
81
     * @throws PackageNotLoadedException
82
     */
83 16
    public function __construct()
84
    {
85 16
        if (! file_exists('vendor/' . $this->getPackageName() . '/composer.json')) {
86 1
            throw new PackageNotLoadedException('You need to install the package ' . $this->getPackageName() . ' to use this provider');
87
        }
88 15
    }
89
90
    /**
91
     *
92
     * @param  array              $headers
93
     * @return WhichBrowserParser
94
     */
95 8
    public function getParser(array $headers)
96
    {
97 8
        if ($this->parser !== null) {
98 7
            return $this->parser;
99
        }
100
101 1
        return new WhichBrowserParser($headers);
102
    }
103
104
    /**
105
     *
106
     * @param Model\Bot                   $bot
107
     * @param \WhichBrowser\Model\Browser $browserRaw
108
     */
109 1
    private function hydrateBot(Model\Bot $bot, \WhichBrowser\Model\Browser $browserRaw)
110
    {
111 1
        $bot->setIsBot(true);
112 1
        $bot->setName($this->getRealResult($browserRaw->getName()));
113 1
    }
114
115
    /**
116
     *
117
     * @param Model\Browser               $browser
118
     * @param \WhichBrowser\Model\Browser $browserRaw
119
     */
120 5
    private function hydrateBrowser(Model\Browser $browser, \WhichBrowser\Model\Browser $browserRaw)
121
    {
122 5
        if ($this->isRealResult($browserRaw->getName(), 'browser', 'name') === true) {
123 1
            $browser->setName($browserRaw->getName());
124 1
            $browser->getVersion()->setComplete($this->getRealResult($browserRaw->getVersion()));
125
126 1
            return;
127
        }
128
129 4
        if (isset($browserRaw->using) && $browserRaw->using instanceof \WhichBrowser\Model\Using) {
130
            /* @var $usingRaw \WhichBrowser\Model\Using */
131 1
            $usingRaw = $browserRaw->using;
132
133 1
            if ($this->isRealResult($usingRaw->getName()) === true) {
134 1
                $browser->setName($usingRaw->getName());
135
136 1
                $browser->getVersion()->setComplete($this->getRealResult($usingRaw->getVersion()));
137
            }
138
        }
139 4
    }
140
141
    /**
142
     *
143
     * @param Model\RenderingEngine      $engine
144
     * @param \WhichBrowser\Model\Engine $engineRaw
145
     */
146 5
    private function hydrateRenderingEngine(Model\RenderingEngine $engine, \WhichBrowser\Model\Engine $engineRaw)
147
    {
148 5
        $engine->setName($this->getRealResult($engineRaw->getName()));
149 5
        $engine->getVersion()->setComplete($this->getRealResult($engineRaw->getVersion()));
150 5
    }
151
152
    /**
153
     *
154
     * @param Model\OperatingSystem  $os
155
     * @param \WhichBrowser\Model\Os $osRaw
156
     */
157 5
    private function hydrateOperatingSystem(Model\OperatingSystem $os, \WhichBrowser\Model\Os $osRaw)
158
    {
159 5
        $os->setName($this->getRealResult($osRaw->getName()));
160 5
        $os->getVersion()->setComplete($this->getRealResult($osRaw->getVersion()));
161 5
    }
162
163
    /**
164
     *
165
     * @param Model\Device               $device
166
     * @param \WhichBrowser\Model\Device $deviceRaw
167
     * @param WhichBrowserParser         $parser
168
     */
169 5
    private function hydrateDevice(Model\Device $device, \WhichBrowser\Model\Device $deviceRaw, WhichBrowserParser $parser)
170
    {
171 5
        $device->setModel($this->getRealResult($deviceRaw->getModel()));
172 5
        $device->setBrand($this->getRealResult($deviceRaw->getManufacturer()));
173 5
        $device->setType($this->getRealResult($parser->getType()));
174
175 5
        if ($parser->isMobile() === true) {
176 1
            $device->setIsMobile(true);
177
        }
178 5
    }
179
180 7
    public function parse($userAgent, array $headers = [])
181
    {
182 7
        $headers['User-Agent'] = $userAgent;
183
184 7
        $parser = $this->getParser($headers);
185
186
        /*
187
         * No result found?
188
         */
189 7
        if ($parser->isDetected() !== true) {
190 1
            throw new NoResultFoundException('No result found for user agent: ' . $userAgent);
191
        }
192
193
        /*
194
         * Hydrate the model
195
         */
196 6
        $result = new Model\UserAgent();
197 6
        $result->setProviderResultRaw($parser->toArray());
198
199
        /*
200
         * Bot detection
201
         */
202 6
        if ($parser->getType() === 'bot') {
203 1
            $this->hydrateBot($result->getBot(), $parser->browser);
204
205 1
            return $result;
206
        }
207
208
        /*
209
         * hydrate the result
210
         */
211 5
        $this->hydrateBrowser($result->getBrowser(), $parser->browser);
212 5
        $this->hydrateRenderingEngine($result->getRenderingEngine(), $parser->engine);
213 5
        $this->hydrateOperatingSystem($result->getOperatingSystem(), $parser->os);
214 5
        $this->hydrateDevice($result->getDevice(), $parser->device, $parser);
215
216 5
        return $result;
217
    }
218
}
219