Skip to content

Commit

Permalink
Merge pull request #5535 from Wazelin/feature/add-engine-version
Browse files Browse the repository at this point in the history
Implemented Engine version parser.
  • Loading branch information
sgiehl committed Sep 1, 2016
2 parents 97ed17d + 253f608 commit e7fd1e7
Show file tree
Hide file tree
Showing 22 changed files with 4,187 additions and 15 deletions.
21 changes: 15 additions & 6 deletions Parser/Client/Browser.php
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ public function parse()
}
}

if (!$matches) {
if (empty($matches)) {
return null;
}

Expand All @@ -262,12 +262,14 @@ public function parse()
if (strtolower($name) == strtolower($browserName)) {
$version = (string) $this->buildVersion($regex['version'], $matches);
$engine = $this->buildEngine(isset($regex['engine']) ? $regex['engine'] : array(), $version);
$engineVersion = $this->buildEngineVersion($engine);
return array(
'type' => 'browser',
'name' => $browserName,
'short_name' => $browserShort,
'version' => $version,
'engine' => $engine
'type' => 'browser',
'name' => $browserName,
'short_name' => $browserShort,
'version' => $version,
'engine' => $engine,
'engine_version' => $engineVersion,
);
}
}
Expand Down Expand Up @@ -300,4 +302,11 @@ protected function buildEngine($engineData, $browserVersion)

return $engine;
}

protected function buildEngineVersion($engine)
{
$engineVersionParser = new Engine\Version($this->userAgent, $engine);

return $engineVersionParser->parse();
}
}
54 changes: 54 additions & 0 deletions Parser/Client/Browser/Engine/Version.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

/**
* Device Detector - The Universal Device Detection library for parsing User Agents
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
*/
namespace DeviceDetector\Parser\Client\Browser\Engine;

use DeviceDetector\Parser\Client\ClientParserAbstract;

/**
* Class Version
*
* Client parser for browser engine version detection
*
* @package DeviceDetector\Parser\Client\Browser\Engine
*/
class Version extends ClientParserAbstract
{
/**
* @var string
*/
private $engine;

/**
* Version constructor.
*
* @param string $ua
* @param string $engine
*/
public function __construct($ua, $engine)
{
parent::__construct($ua);

$this->engine = $engine;
}

public function parse()
{
if (empty($this->engine)) {
return '';
}

preg_match("~$this->engine\s*/?\s*((?(?=\d+\.\d)\d+[.\d]*|\d{1,7}(?=(?:\D|$))))~i", $this->userAgent, $matches);

if (!$matches) {
return '';
}

return array_pop($matches);
}
}
4 changes: 2 additions & 2 deletions Tests/DeviceDetectorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
use DeviceDetector\Parser\Device\DeviceParserAbstract;
use DeviceDetector\Parser\ParserAbstract;
use DeviceDetector\Yaml\Symfony;
use \Spyc;

class DeviceDetectorTest extends \PHPUnit_Framework_TestCase
{
Expand Down Expand Up @@ -324,7 +323,8 @@ public function testGetClient()
'name' => 'Internet Explorer',
'short_name' => 'IE',
'version' => '9.0',
'engine' => 'Trident'
'engine' => 'Trident',
'engine_version' => '5.0',
);
$this->assertEquals($expected, $dd->getClient());
}
Expand Down
Loading

0 comments on commit e7fd1e7

Please sign in to comment.