Избавление от phpdotenv, переработка сборщика

This commit is contained in:
RedHood
2020-09-17 22:27:12 +10:00
parent 7c0fcc392d
commit 48946d9070
14 changed files with 253 additions and 253 deletions

View File

@@ -4,100 +4,80 @@ declare(strict_types=1);
namespace VK;
use Exception;
use VK\Robots\RobotAbstract;
use VK\Browsers\BrowserAbstract;
use VK\Proxies\ProxyAbstract;
use VK\Captchas\CaptchaAbstract;
use VK\Loggers\Jasmo;
use \Exception;
use \VK\Core;
use \VK\BuildAbstract;
use \VK\Robots\RobotAbstract;
use \VK\Robots\Group;
use \VK\Robots\User;
use \VK\Browsers\BrowserAbstract;
use \VK\Proxies\ProxyAbstract;
use \VK\Captchas\CaptchaAbstract;
use \VK\Loggers\Jasmo;
/**
* Сборщик
*
* @package Builder
*
* @method public group() Создание робота-группы
* @method public user() Создание робота-пользователя
*
* @method private reg() Регистрация в ядре
*
* @author Arsen Mirzaev
*/
class Builder
{
/**
* Собираемый объект
*
* @var object
*/
private object $target;
/**
* Параметры для сборки
*
* @var array
*/
private array $params;
public function __construct(array $params = [])
public function __construct()
{
$this->params = $params;
return $this;
}
/**
* Сборщик роботов (паттерн: factory)
* Создание робота-группы
*
* Проверка существования получившегося класса и запись в свойство ядра
*
* @return object
* @return Group
*/
public function robot($robot = null): object
public function group(): Group
{
// Ищет по словарю и подставляет имя метода вместо отправленного идентификатора
if (is_int($robot = (int) ($robot ?? $_ENV['DEFAULT_ROBOT_TYPE'])))
$robot = $this->convert('robot', $robot);
if (class_exists($robot_class = __NAMESPACE__ . '\\Robots\\' . ucfirst($robot))) {
$this->target = new $robot_class($robot);
} else {
throw new Exception("Неизвестный тип робота");
}
// Присвоение параметров из сборщика в экземпляр класса робота
foreach (array_keys(get_class_vars($robot_class)) as $key => $value)
{
if ($value !== null && isset($this->params[$key]))
{
$this->target->$value = $this->params[$key];
}
}
// Добавление в регистр, установка идентификатора и обновление счётчика
if (false !== Core::set($this->target->setID(Core::$robots_amount++), $this->target)) return $this->target;
else throw new Exception('Ошибка при сборке робота "Group"');
return $this->reg(new \VK\Robots\Group());
}
/**
* Конвертер идентификаторов в значения
* Создание робота-пользователя
*
* Используется конструкция if из-за строгого сравнения
*
* @param string $var Словарь идентификаторов
* @param int $number Идентификатор
* @return string
* @return User
*/
private function convert(string $var, int $number): string
public function user(): User
{
if ($var === 'robot') {
if ($number === 0) {
return 'Group';
} else if ($number === 1) {
return 'Account';
} else throw new Exception('Неизвестный идентификатор робота');
} else throw new Exception('Неизвестный тип словаря');
return $this->reg(new \VK\Robots\User());
}
/**
* Регистрация в ядре
*
* @return RobotAbstract
*
* @todo Добавить создание нового процесса (многопоточность)
*/
private function reg(RobotAbstract $robot): RobotAbstract
{
// Присвоение идентификатора
$robot->id = ++Core::$robots;
// Регистрация в ядре
Core::set($robot->id, $robot);
return $robot;
}
/**
* Установка журналирования
*
* @todo Добавить установку иного журналиста по спецификации PSR-3
* @return RobotAbstract
*
* @todo Добавить установку иного журналиста по спецификации PSR-3
*/
public function log($file = null): Builder
{