An error occurred while loading the file. Please try again.
-
Guillaume Perréal authored4157bd72
<?php declare(strict_types=1);
/*
* irstea/php-cs-fixer-config - Jeux de règles pour php-cs-fixer.
* Copyright (C) 2018-2020 IRSTEA
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
*/
namespace Irstea\CS\Composer;
use Assert\Assertion;
use Irstea\CS\FileLocator\FileLocatorInterface;
/**
* Class ComposerPackage.
*/
final class ComposerPackage implements ComposerPackageInterface
{
/**
* @var array|null
*/
private $composerJson;
/**
* @var FileLocatorInterface
*/
private $fileLocator;
/**
* ComposerPackage constructor.
*/
public function __construct(FileLocatorInterface $fileLocator)
{
$this->fileLocator = $fileLocator;
}
/**
* {@inheritdoc}
*/
public function getName(): string
{
return $this->getKey('name', '');
}
/**
* {@inheritdoc}
*/
public function getDescription(): string
{
return $this->getKey('description', '');
}
/**
* {@inheritdoc}
*/
public function getRequiredPHPVersion(): float
{
$require = $this->getKey('require', []);
if (
isset($require['php'])
&& preg_match('/(?:>=?|\^|~)\s*([578]\.\d)/', $require['php'], $groups)
) {
return (float) $groups[1];
}
return 5.6;
}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
/**
* {@inheritdoc}
*/
public function getLicenses(): iterable
{
return (array) $this->getKey('license', 'proprietary');
}
/**
* @param string $key
* @param mixed $default
*
* @throws \Assert\AssertionFailedException
*
* @return mixed|string|number|null
*/
private function getKey($key, $default = null)
{
Assertion::string($key);
$data = $this->getComposerJson();
return \array_key_exists($key, $data) ? $data[$key] : $default;
}
private function getComposerJson(): array
{
return \is_array($this->composerJson) ? $this->composerJson : $this->readComposerJson();
}
/**
* @throws \Assert\AssertionFailedException
*/
private function readComposerJson(): array
{
$composerPath = $this->fileLocator->locate('composer.json');
Assertion::notNull($composerPath, 'could not find composer.json');
$content = file_get_contents($composerPath);
Assertion::string($content, "could not read `$composerPath`");
$this->composerJson = json_decode($content, true);
Assertion::isArray($this->composerJson);
return $this->composerJson;
}
}