Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
}
],
"minimum-stability": "dev",
"require": {},
"require": {
"ext-intl": "*"
},
"autoload": {
"psr-4": {
"Stub\\Framework\\": "src/"
Expand Down
25 changes: 21 additions & 4 deletions src/Console/Base/Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,18 @@

namespace Stub\Framework\Console\Base;

abstract class Command
use Stub\Framework\Contracts\Console\Commands;

/**
* Абстрактный класс для всех команд
* ---
* Класс:
* - содержит реализации общих методов для всех команд;
* - инициирует все свойства команд, общие для всех команд;
* - имплементи́рует общий для всех интерфейс;
*
*/
abstract class Command implements Commands
{
/**
* Имя команды (собственно сама команда как есть)
Expand Down Expand Up @@ -38,10 +49,16 @@ public function getName(): string
return $this->name;
}

public function __construct()
/**
* Основной рабочий метод родительского класса команды
* --
* @param Input|null $input
* @param Output|null $output
* @return string
*/
public function run(Input $input = null, Output $output = null): string
{
$this->name = "No Name!!!";
$this->description = "NO Description !!!";
return "Empty...";
}


Expand Down
62 changes: 60 additions & 2 deletions src/Console/Base/Output.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,22 @@ private function __construct()
{
}

public static function getInstance()
public static function getInstance(): Output
{
if (self::$_instance === null) {
self::$_instance = new self;
}
return self::$_instance;
}

/**
* Выводит в консоль строку сообщения
* ----------------------------------
* @param string|array $message Строка сообщения для вывода в консоль
* @param bool $newline Флаг / признак необходимости выполнить перевод
* каретки на новую строку по окончании вывода сообщения
* @return void
*/
public function write($message, bool $newline = false)
{
if ($newline) {
Expand All @@ -27,14 +35,64 @@ public function write($message, bool $newline = false)
}
}

/**
* Выводит в консоль строку сообщения с последующим переводом каретки на новую строку.
* ----------------------------------
* @param string|array $message Строка сообщения для вывода в консоль
* @return void
*/
public function writeln($message)
{
if (is_array($message)){
if (is_array($message)) {
var_dump($message);
} else {
echo $message;
echo "\r\n";
}

}

/**
* Выводит в консоль строку сообщения, но каретку возвращает в начало строки
* ----------------------------------
* метод подходит для вывода динамических данных изменение которых требует
* перезаписи значения вывода.
* @param string $message
* @return void
*/
public function writels(string $message)
{
echo $message;
echo "\r";
}


/**
* Выводит прогреc бар вида: [наименование процесса] .... 50%
* ---
*
* @param int $percent Численное значение процента выполнения процесса [от 0 до 100], иные значения будут приведены
* к ближайшему пределу (110->100, -20 -> 0) значения отличных от INT типов вызовут исключение
* @param string|null $name Наименование процесса для прогессбара, в случае если требуется его отобразить в именно
* в строке прогресс бара, в противном случае параметр указывать нет необходимости, он будет заменен на пустую строку.
* Либо можно поставить вместо наименования отступ (пустой или форматированный)
* @param int|null $totalLengthStringProgressBar Общая итоговая длина прогресс бара в символах (не обязателен)
* @return void
*/
public function writeProgressLine(int $percent, string $name = "", int $totalLengthStringProgressBar = null)
{
if ($percent > 100) $percent = 100;
if (!$totalLengthStringProgressBar) $totalLengthStringProgressBar = 90;
$lineLength = $totalLengthStringProgressBar - strlen($name) - 4;
$zch = $lineLength * $percent / 100;
$pch = $lineLength - $zch;
echo str_pad($name . " ", strlen($name) + $zch, ".");
echo str_pad(" ", $pch, " ", STR_PAD_LEFT);
if ($percent == 100) {
echo "DONE";
} else {
echo str_pad($percent . "%", 4);
}
echo "\r";
}
}
7 changes: 4 additions & 3 deletions src/Console/Commands/AboutCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,18 @@
namespace Stub\Framework\Console\Commands;

use Stub\Framework\Console\Base\Command;
use Stub\Framework\Contracts\Console\Commands;
use Stub\Framework\Console\Base\Input;
use Stub\Framework\Console\Base\Output;

class AboutCommand extends Command implements Commands
class AboutCommand extends Command
{
public function __construct()
{
$this->name = "about";
$this->description = "Отображает основные данные о приложении";
}

public function run(): string
public function run(Input $input = null, Output $output = null): string
{
echo "отработал метод" . $this::getName();
return " Ok!";
Expand Down
7 changes: 4 additions & 3 deletions src/Console/Commands/Config/ConfigListCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,18 @@
namespace Stub\Framework\Console\Commands\Config;

use Stub\Framework\Console\Base\Command;
use Stub\Framework\Contracts\Console\Commands;
use Stub\Framework\Console\Base\Input;
use Stub\Framework\Console\Base\Output;

class ConfigListCommand extends Command implements Commands
class ConfigListCommand extends Command
{
public function __construct()
{
$this->name = "config:list";
$this->description = "Выводит список всех конфигурационных параметров в виде таблицы";
}

public function run(): string
public function run(Input $input = null, Output $output = null): string
{
echo "отработал метод" . $this::getName();
return " Ok!";
Expand Down
44 changes: 44 additions & 0 deletions src/Console/Commands/CountdownCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<?php

namespace Stub\Framework\Console\Commands;

use Stub\Framework\Console\Base\Command;
use Stub\Framework\Console\Base\StringDecorator as SD;
use Stub\Framework\Main\Application;
use Stub\Framework\Console\Base\Input;
use Stub\Framework\Console\Base\Output;

/**
*
*/
class CountdownCommand extends Command
{
public function __construct()
{
$this->name = "countdown";
$this->description = "Управляет таймером обратного отсчета текущей активной заглушки";
}

/**
* Основной метод команды управления таймером обратного отсчета
*--------------------------------------------------------------------------------
* @return string - технический отчет о выполнении команды
*/
public function run(Input $input = null, Output $output = null): string
{
//из потока ввода берем передаваемый параметр
// это может быть команда off - выключить таймер
// это может быть команда on - включить таймер
// может быть set - установить конкретную дату
// может быть set hour - установить на час
// может быть set day - установить сутки
// может быть set month - установить месяц
// может быть set year - установить год

$resultString = "SimpleStub Framework " . SD::green(Application::VERSION) . "\r\n\n";
$resultString .= "Получена команда " . SD::green($input->getArguments()[1]) . "\r\n\n";
$output->writeln($resultString);
parent::run();
return $resultString;
}
}
12 changes: 9 additions & 3 deletions src/Console/Commands/HelpCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,23 @@
namespace Stub\Framework\Console\Commands;

use Stub\Framework\Console\Base\Command;
use Stub\Framework\Contracts\Console\Commands;
use Stub\Framework\Console\Base\Input;
use Stub\Framework\Console\Base\Output;

class HelpCommand extends Command implements Commands
class HelpCommand extends Command
{
/**
* Конструктор класса команды HELP
* -------------------------------
*
*/
public function __construct()
{
$this->name = "help";
$this->description = "Выводит расширенную справку по выбранной команде";
}

public function run(): string
public function run(Input $input = null, Output $output = null): string
{
echo "отработал метод" . $this::getName();
return " Ok!";
Expand Down
33 changes: 19 additions & 14 deletions src/Console/Commands/ListCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
namespace Stub\Framework\Console\Commands;

use Stub\Framework\Console\Base\Command;
use Stub\Framework\Console\Base\Input;
use Stub\Framework\Console\Base\Output;
use Stub\Framework\Console\Base\StringDecorator as SD;
use Stub\Framework\Contracts\Console\Commands;
use Stub\Framework\Main\Application;

class ListCommand extends Command implements Commands
class ListCommand extends Command
{
public function __construct()
{
Expand All @@ -21,42 +23,45 @@ public function __construct()
* Формирует список всех доступных в текущей версии SimpleStub Framework команд
* с общей информацией о действиях команд ыи параметрах.
*
* Детальная информация по каждой коменде может быть получена при использовании команды help с передачей
* в качестве параметра ей наименования команды, справку по которой нужно получить.
* @return string - возвращает отформатированную для консоли строку результата.
* Детальная информация по каждой команде может быть получена при использовании команды
* help с передачей в качестве параметра ей наименования команды, справку по которой
* нужно получить.
* @return string - возвращает отформатированную для консоли строку результата.
*/
public function run(): string
public function run(Input $input = null, Output $output = null): string
{
$resultString = "SimpleStub Framework " . SD::green(Application::VERSION) . "\r\n\n";
$resultString .= SD::brown("Usage:\r\n");
$resultString .= "command [options] [arguments]\r\n\n";
$resultString .= SD::brown("Options:\r\n");
$resultString .= " " . str_pad(SD::green("-h, --help"), 32);
$resultString .= "Показать справку для выбранной команды, если команда не задана, будет выполнена команда" . SD::green("list") . "\r\n";
$resultString .= "Показать справку для выбранной команды, если команда не задана, будет выполнена команда"
. SD::green("list") . "\r\n";
$resultString .= " " . str_pad(SD::green("-q, --quiet"), 32);
$resultString .= "Блокировать (не выводить / игнорировать) все сообщения (генерируемые при выполнении команды)\r\n";
$resultString .= " " . str_pad(SD::green("-V, --version"), 32);
$resultString .= "Вывести версию приложения (команда в данном случае не важна)\r\n";
$resultString .= " " . str_pad(SD::green("-n, --no-interaction"), 32);
$resultString .= "Не задавать никаких вопросов (блокировать интерактивный режим)\r\n\n";

$prepareListCommand = $this->getClassesByNamespace("Stub\Framework\Console\Commands\\");
$prepareListCommand = $this->getClassesByNamespace(__NAMESPACE__);
if (empty($prepareListCommand)) {
$resultString .= SD::red("ДОСТУПНЫХ КОМАНД НЕТ!") . "\r\n";
} else {
$resultString .= SD::brown("Available commands:") . "\r\n";
$sortclasses = $this->sortCommandsByGroup($prepareListCommand, "Stub\Framework\Console\Commands\\");
foreach ($sortclasses as $key => $value) {
$sortedAvailableClasses = $this->sortCommandsByGroup($prepareListCommand, __NAMESPACE__);
foreach ($sortedAvailableClasses as $key => $value) {
$resultString .= SD::brown($key) . "\r\n";
foreach ($value as $fclass) {
foreach ($value as $commandClass) {
/** @var Commands $currentClass */
$currentClass = new $fclass();
$currentClass = new $commandClass();
$resultString .= " " . str_pad(SD::green($currentClass->name), 32);
$resultString .= $currentClass->description . "\r\n";
}
}
}
return $resultString;
$output->writeln($resultString);
return "OK";
}

/**
Expand All @@ -65,7 +70,7 @@ public function run(): string
* Для работы этого метода используется автозагрузчик ***composer***.
*
* ***Важно!!!***
* Должен быть сгенерирован оптимизированный автозагрузчик, используя -oпцию для работы со всеми классами.
* Должен быть сгенерирован оптимизированный автозагрузчик, используя опцию для работы со всеми классами.
* ***composer dump-autoload -o ***
* @return array
*/
Expand Down Expand Up @@ -119,7 +124,7 @@ private function getClassesByNamespace(string $namespace): array
* @return array Двумерный ассоциативный массив где key - это группа команд, value - одномерный
* массив пространств имен классов команд, входящих в группу.
*/
private function sortCommandsByGroup(array $prepareArrayCommandClasses, $namespace): array
private function sortCommandsByGroup(array $prepareArrayCommandClasses, string $namespace): array
{
if (0 !== strpos($namespace, '\\')) {
$namespace = '\\' . $namespace;
Expand Down
7 changes: 4 additions & 3 deletions src/Console/Commands/Make/MakeNewCustomStubCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,18 @@
namespace Stub\Framework\Console\Commands\Make;

use Stub\Framework\Console\Base\Command;
use Stub\Framework\Contracts\Console\Commands;
use Stub\Framework\Console\Base\Input;
use Stub\Framework\Console\Base\Output;

class MakeNewCustomStubCommand extends Command implements Commands
class MakeNewCustomStubCommand extends Command
{
public function __construct()
{
$this->name = "make:new-custom-stub";
$this->description = "Создает пользовательскую заглушку из штатного шаблона";
}

public function run(): string
public function run(Input $input = null, Output $output = null): string
{
echo "отработал метод" . $this::getName();
return " Ok!";
Expand Down
7 changes: 4 additions & 3 deletions src/Console/Commands/ResetCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,18 @@
namespace Stub\Framework\Console\Commands;

use Stub\Framework\Console\Base\Command;
use Stub\Framework\Contracts\Console\Commands;
use Stub\Framework\Console\Base\Input;
use Stub\Framework\Console\Base\Output;

class ResetCommand extends Command implements Commands
class ResetCommand extends Command
{
public function __construct()
{
$this->name = "reset";
$this->description = "Сбрасывает заглушку к первоначальному состоянию полностью (деструктивная функция, все изменения сделанные ранее будут потеряны";
}

public function run(): string
public function run(Input $input = null, Output $output = null): string
{
echo "отработал метод" . $this::getName();
return " Ok!";
Expand Down
Loading