You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

100 lines
2.7 KiB

<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Http;
use Github\HttpClient\Builder;
use GrahamCampbell\CachePlugin\CachePlugin;
use Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator;
use Psr\Cache\CacheItemPoolInterface;
use ReflectionClass;
/**
* This is the client builder class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
class ClientBuilder extends Builder
{
/**
* Add a cache plugin to cache responses locally.
*
* @param \Psr\Cache\CacheItemPoolInterface $cachePool
* @param array $config
*
* @return void
*/
public function addCache(CacheItemPoolInterface $cachePool, array $config = [])
{
$this->setCachePlugin($cachePool, $config['generator'] ?? null, $config['lifetime'] ?? null);
$this->setPropertyValue('httpClientModified', true);
}
/**
* Add a cache plugin to cache responses locally.
*
* @param \Psr\Cache\CacheItemPoolInterface $cachePool
* @param \Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator|null $generator
* @param int|null $lifetime
*
* @return void
*/
protected function setCachePlugin(CacheItemPoolInterface $cachePool, CacheKeyGenerator $generator = null, int $lifetime = null)
{
$stream = $this->getPropertyValue('streamFactory');
$this->setPropertyValue('cachePlugin', new CachePlugin($cachePool, $stream, $generator, $lifetime));
}
/**
* Get the value of the given private property on the builder.
*
* @param string $name
*
* @return mixed
*/
protected function getPropertyValue(string $name)
{
return static::getProperty($name)->getValue($this);
}
/**
* Set the value of the given private property on the builder.
*
* @param string $name
* @param mixed $value
*
* @return void
*/
protected function setPropertyValue(string $name, $value)
{
return static::getProperty($name)->setValue($this, $value);
}
/**
* Get the builder reflection property for the given name.
*
* @param string $name
*
* @return \ReflectionProperty
*/
protected static function getProperty(string $name)
{
$prop = (new ReflectionClass(Builder::class))->getProperty($name);
$prop->setAccessible(true);
return $prop;
}
}