pecm/pickling

View on GitHub
src/Resource/Package.php

Summary

Maintainability
A
35 mins
Test Coverage
A
100%
<?php
declare(strict_types = 1);
 
namespace Pickling\Resource;
 
use Pickling\Channel\ChannelInterface;
use Pickling\Resource\Package\Info;
use Pickling\Resource\Package\Release;
use Pickling\Resource\Package\ReleaseList;
use Pickling\Traits\HttpRequest;
use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface;
use SimpleXMLElement;
 
final class Package {
use HttpRequest;
 
/**
* @var \Pickling\Channel\ChannelInterface
*/
private ChannelInterface $channel;
 
private string $packageName;
 
public function __construct(
Method `__construct` has 5 arguments (exceeds 4 allowed). Consider refactoring.
ChannelInterface $channel,
ClientInterface $httpClient,
RequestFactoryInterface $requestFactory,
StreamFactoryInterface $streamFactory,
string $packageName
) {
$this->channel = $channel;
$this->httpClient = $httpClient;
$this->requestFactory = $requestFactory;
$this->streamFactory = $streamFactory;
$this->packageName = $packageName;
}
 
public function getName(): string {
return $this->packageName;
}
 
/**
* Returns the package information
*
* @link https://pecl.php.net/rest/p/:packageName/info.xml
* @link https://pear.php.net/rest/p/:packageName/info.xml
*/
public function getInfo(): Info {
$content = $this->sendRequest(
'GET',
sprintf(
'%s/rest/p/%s/info.xml',
$this->channel->getUrl(),
$this->packageName
)
);
 
return new Info(new SimpleXMLElement($content));
}
 
/**
* Returns the list of package releases
*
* @link https://pecl.php.net/rest/r/:packageName/allreleases.xml
* @link https://pear.php.net/rest/r/:packageName/allreleases.xml
*/
public function getReleaseList(): ReleaseList {
$content = $this->sendRequest(
'GET',
sprintf(
'%s/rest/r/%s/allreleases.xml',
$this->channel->getUrl(),
$this->packageName
)
);
 
return new ReleaseList(new SimpleXMLElement($content));
}
 
/**
* Returns the latest version number
*
* @link https://pecl.php.net/rest/r/:packageName/latest.txt
* @link https://pear.php.net/rest/r/:packageName/latest.txt
*/
public function getLatestVersion(): string {
return $this->sendRequest(
'GET',
sprintf(
'%s/rest/r/%s/latest.txt',
$this->channel->getUrl(),
$this->packageName
)
);
}
 
/**
* Returns the latest stable version number
*
* @link https://pecl.php.net/rest/r/:packageName/stable.txt
* @link https://pear.php.net/rest/r/:packageName/stable.txt
*/
public function getStableVersion(): string {
return $this->sendRequest(
'GET',
sprintf(
'%s/rest/r/%s/stable.txt',
$this->channel->getUrl(),
$this->packageName
)
);
}
 
/**
* Returns the latest beta version number
*
* @link https://pecl.php.net/rest/r/:packageName/beta.txt
* @link https://pear.php.net/rest/r/:packageName/beta.txt
*/
public function getBetaVersion(): string {
return $this->sendRequest(
'GET',
sprintf(
'%s/rest/r/%s/beta.txt',
$this->channel->getUrl(),
$this->packageName
)
);
}
 
/**
* Returns the latest alpha version number
*
* @link https://pecl.php.net/rest/r/:packageName/alpha.txt
* @link https://pear.php.net/rest/r/:packageName/alpha.txt
*/
public function getAlphaVersion(): string {
return $this->sendRequest(
'GET',
sprintf(
'%s/rest/r/%s/alpha.txt',
$this->channel->getUrl(),
$this->packageName
)
);
}
 
/**
* Selects a specific release for release related operations
*/
public function at(string $releaseNumber): Release {
// "magic" version numbers
switch ($releaseNumber) {
case 'latest':
$releaseNumber = $this->getLatestVersion();
break;
case 'stable':
$releaseNumber = $this->getStableVersion();
break;
case 'beta':
$releaseNumber = $this->getBetaVersion();
break;
case 'alpha':
$releaseNumber = $this->getAlphaVersion();
break;
}
 
return new Release(
$this->channel,
$this->httpClient,
$this->requestFactory,
$this->streamFactory,
$this->packageName,
$releaseNumber
);
}
}