Browscap\Data\Factory\PlatformFactory::build PHP Method

build() public method

Load a platforms.json file and parse it into the platforms data array
public build ( array $platformData, array $json, string $platformName ) : Platform
$platformData array
$json array
$platformName string
return Browscap\Data\Platform
    public function build(array $platformData, array $json, $platformName)
    {
        if (!isset($platformData['properties'])) {
            $platformData['properties'] = [];
        }
        if (!array_key_exists('lite', $platformData)) {
            throw new \UnexpectedValueException('the value for "lite" key is missing for the platform with the key "' . $platformName . '"');
        }
        if (!array_key_exists('standard', $platformData)) {
            throw new \UnexpectedValueException('the value for "standard" key is missing for the platform with the key "' . $platformName . '"');
        }
        if (array_key_exists('inherits', $platformData)) {
            $parentName = $platformData['inherits'];
            if (!isset($json['platforms'][$parentName])) {
                throw new \UnexpectedValueException('parent Platform "' . $parentName . '" is missing for platform "' . $platformName . '"');
            }
            $parentPlatform = $this->build($json['platforms'][$parentName], $json, $parentName);
            $parentPlatformData = $parentPlatform->getProperties();
            $platformProperties = $platformData['properties'];
            foreach ($platformProperties as $name => $value) {
                if (isset($parentPlatformData[$name]) && $parentPlatformData[$name] === $value) {
                    throw new \UnexpectedValueException('the value for property "' . $name . '" has the same value in the keys "' . $platformName . '" and its parent "' . $platformData['inherits'] . '"');
                }
            }
            $platformData['properties'] = array_merge($parentPlatformData, $platformProperties);
            if (!$parentPlatform->isLite()) {
                $platformData['lite'] = false;
            }
            if (!$parentPlatform->isStandard()) {
                $platformData['standard'] = false;
            }
        }
        return new Platform($platformData['match'], $platformData['properties'], $platformData['lite'], $platformData['standard']);
    }

Usage Example

Exemplo n.º 1
0
 /**
  * tests the creating of an platform factory
  *
  * @group data
  * @group sourcetest
  */
 public function testBuild()
 {
     $platformData = ['abc' => 'def', 'match' => 'test*', 'lite' => true, 'standard' => true];
     $json = [];
     $platformName = 'Test';
     $deviceData = ['Device_Name' => 'TestDevice'];
     $deviceMock = $this->getMockBuilder(\Browscap\Data\Device::class)->disableOriginalConstructor()->setMethods(['getProperties'])->getMock();
     $deviceMock->expects(self::any())->method('getProperties')->will(self::returnValue($deviceData));
     $collection = $this->getMockBuilder(\Browscap\Data\DataCollection::class)->disableOriginalConstructor()->setMethods(['getDevice'])->getMock();
     $collection->expects(self::any())->method('getDevice')->will(self::returnValue($deviceMock));
     self::assertInstanceOf('\\Browscap\\Data\\Platform', $this->object->build($platformData, $json, $platformName, $collection));
 }
All Usage Examples Of Browscap\Data\Factory\PlatformFactory::build
PlatformFactory