Skip to content

Commit 402a281

Browse files
authored
Merge pull request #14 from SimpleREST/develop
Develop
2 parents a786f82 + 84f3da6 commit 402a281

18 files changed

+486
-121
lines changed

composer.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
}
1616
],
1717
"minimum-stability": "dev",
18-
"require": {},
18+
"require": {
19+
"ext-intl": "*"
20+
},
1921
"autoload": {
2022
"psr-4": {
2123
"Stub\\Framework\\": "src/"

src/Console/Base/Command.php

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,18 @@
22

33
namespace Stub\Framework\Console\Base;
44

5-
abstract class Command
5+
use Stub\Framework\Contracts\Console\Commands;
6+
7+
/**
8+
* Абстрактный класс для всех команд
9+
* ---
10+
* Класс:
11+
* - содержит реализации общих методов для всех команд;
12+
* - инициирует все свойства команд, общие для всех команд;
13+
* - имплементи́рует общий для всех интерфейс;
14+
*
15+
*/
16+
abstract class Command implements Commands
617
{
718
/**
819
* Имя команды (собственно сама команда как есть)
@@ -38,10 +49,16 @@ public function getName(): string
3849
return $this->name;
3950
}
4051

41-
public function __construct()
52+
/**
53+
* Основной рабочий метод родительского класса команды
54+
* --
55+
* @param Input|null $input
56+
* @param Output|null $output
57+
* @return string
58+
*/
59+
public function run(Input $input = null, Output $output = null): string
4260
{
43-
$this->name = "No Name!!!";
44-
$this->description = "NO Description !!!";
61+
return "Empty...";
4562
}
4663

4764

src/Console/Base/Output.php

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,22 @@ private function __construct()
1010
{
1111
}
1212

13-
public static function getInstance()
13+
public static function getInstance(): Output
1414
{
1515
if (self::$_instance === null) {
1616
self::$_instance = new self;
1717
}
1818
return self::$_instance;
1919
}
2020

21+
/**
22+
* Выводит в консоль строку сообщения
23+
* ----------------------------------
24+
* @param string|array $message Строка сообщения для вывода в консоль
25+
* @param bool $newline Флаг / признак необходимости выполнить перевод
26+
* каретки на новую строку по окончании вывода сообщения
27+
* @return void
28+
*/
2129
public function write($message, bool $newline = false)
2230
{
2331
if ($newline) {
@@ -27,14 +35,64 @@ public function write($message, bool $newline = false)
2735
}
2836
}
2937

38+
/**
39+
* Выводит в консоль строку сообщения с последующим переводом каретки на новую строку.
40+
* ----------------------------------
41+
* @param string|array $message Строка сообщения для вывода в консоль
42+
* @return void
43+
*/
3044
public function writeln($message)
3145
{
32-
if (is_array($message)){
46+
if (is_array($message)) {
3347
var_dump($message);
3448
} else {
3549
echo $message;
3650
echo "\r\n";
3751
}
3852

3953
}
54+
55+
/**
56+
* Выводит в консоль строку сообщения, но каретку возвращает в начало строки
57+
* ----------------------------------
58+
* метод подходит для вывода динамических данных изменение которых требует
59+
* перезаписи значения вывода.
60+
* @param string $message
61+
* @return void
62+
*/
63+
public function writels(string $message)
64+
{
65+
echo $message;
66+
echo "\r";
67+
}
68+
69+
70+
/**
71+
* Выводит прогреc бар вида: [наименование процесса] .... 50%
72+
* ---
73+
*
74+
* @param int $percent Численное значение процента выполнения процесса [от 0 до 100], иные значения будут приведены
75+
* к ближайшему пределу (110->100, -20 -> 0) значения отличных от INT типов вызовут исключение
76+
* @param string|null $name Наименование процесса для прогессбара, в случае если требуется его отобразить в именно
77+
* в строке прогресс бара, в противном случае параметр указывать нет необходимости, он будет заменен на пустую строку.
78+
* Либо можно поставить вместо наименования отступ (пустой или форматированный)
79+
* @param int|null $totalLengthStringProgressBar Общая итоговая длина прогресс бара в символах (не обязателен)
80+
* @return void
81+
*/
82+
public function writeProgressLine(int $percent, string $name = "", int $totalLengthStringProgressBar = null)
83+
{
84+
if ($percent > 100) $percent = 100;
85+
if (!$totalLengthStringProgressBar) $totalLengthStringProgressBar = 90;
86+
$lineLength = $totalLengthStringProgressBar - strlen($name) - 4;
87+
$zch = $lineLength * $percent / 100;
88+
$pch = $lineLength - $zch;
89+
echo str_pad($name . " ", strlen($name) + $zch, ".");
90+
echo str_pad(" ", $pch, " ", STR_PAD_LEFT);
91+
if ($percent == 100) {
92+
echo "DONE";
93+
} else {
94+
echo str_pad($percent . "%", 4);
95+
}
96+
echo "\r";
97+
}
4098
}

src/Console/Commands/AboutCommand.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@
33
namespace Stub\Framework\Console\Commands;
44

55
use Stub\Framework\Console\Base\Command;
6-
use Stub\Framework\Contracts\Console\Commands;
6+
use Stub\Framework\Console\Base\Input;
7+
use Stub\Framework\Console\Base\Output;
78

8-
class AboutCommand extends Command implements Commands
9+
class AboutCommand extends Command
910
{
1011
public function __construct()
1112
{
1213
$this->name = "about";
1314
$this->description = "Отображает основные данные о приложении";
1415
}
1516

16-
public function run(): string
17+
public function run(Input $input = null, Output $output = null): string
1718
{
1819
echo "отработал метод" . $this::getName();
1920
return " Ok!";

src/Console/Commands/Config/ConfigListCommand.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@
33
namespace Stub\Framework\Console\Commands\Config;
44

55
use Stub\Framework\Console\Base\Command;
6-
use Stub\Framework\Contracts\Console\Commands;
6+
use Stub\Framework\Console\Base\Input;
7+
use Stub\Framework\Console\Base\Output;
78

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

16-
public function run(): string
17+
public function run(Input $input = null, Output $output = null): string
1718
{
1819
echo "отработал метод" . $this::getName();
1920
return " Ok!";
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
namespace Stub\Framework\Console\Commands;
4+
5+
use Stub\Framework\Console\Base\Command;
6+
use Stub\Framework\Console\Base\StringDecorator as SD;
7+
use Stub\Framework\Main\Application;
8+
use Stub\Framework\Console\Base\Input;
9+
use Stub\Framework\Console\Base\Output;
10+
11+
/**
12+
*
13+
*/
14+
class CountdownCommand extends Command
15+
{
16+
public function __construct()
17+
{
18+
$this->name = "countdown";
19+
$this->description = "Управляет таймером обратного отсчета текущей активной заглушки";
20+
}
21+
22+
/**
23+
* Основной метод команды управления таймером обратного отсчета
24+
*--------------------------------------------------------------------------------
25+
* @return string - технический отчет о выполнении команды
26+
*/
27+
public function run(Input $input = null, Output $output = null): string
28+
{
29+
//из потока ввода берем передаваемый параметр
30+
// это может быть команда off - выключить таймер
31+
// это может быть команда on - включить таймер
32+
// может быть set - установить конкретную дату
33+
// может быть set hour - установить на час
34+
// может быть set day - установить сутки
35+
// может быть set month - установить месяц
36+
// может быть set year - установить год
37+
38+
$resultString = "SimpleStub Framework " . SD::green(Application::VERSION) . "\r\n\n";
39+
$resultString .= "Получена команда " . SD::green($input->getArguments()[1]) . "\r\n\n";
40+
$output->writeln($resultString);
41+
parent::run();
42+
return $resultString;
43+
}
44+
}

src/Console/Commands/HelpCommand.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,23 @@
33
namespace Stub\Framework\Console\Commands;
44

55
use Stub\Framework\Console\Base\Command;
6-
use Stub\Framework\Contracts\Console\Commands;
6+
use Stub\Framework\Console\Base\Input;
7+
use Stub\Framework\Console\Base\Output;
78

8-
class HelpCommand extends Command implements Commands
9+
class HelpCommand extends Command
910
{
11+
/**
12+
* Конструктор класса команды HELP
13+
* -------------------------------
14+
*
15+
*/
1016
public function __construct()
1117
{
1218
$this->name = "help";
1319
$this->description = "Выводит расширенную справку по выбранной команде";
1420
}
1521

16-
public function run(): string
22+
public function run(Input $input = null, Output $output = null): string
1723
{
1824
echo "отработал метод" . $this::getName();
1925
return " Ok!";

src/Console/Commands/ListCommand.php

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
namespace Stub\Framework\Console\Commands;
44

55
use Stub\Framework\Console\Base\Command;
6+
use Stub\Framework\Console\Base\Input;
7+
use Stub\Framework\Console\Base\Output;
68
use Stub\Framework\Console\Base\StringDecorator as SD;
79
use Stub\Framework\Contracts\Console\Commands;
810
use Stub\Framework\Main\Application;
911

10-
class ListCommand extends Command implements Commands
12+
class ListCommand extends Command
1113
{
1214
public function __construct()
1315
{
@@ -21,42 +23,45 @@ public function __construct()
2123
* Формирует список всех доступных в текущей версии SimpleStub Framework команд
2224
* с общей информацией о действиях команд ыи параметрах.
2325
*
24-
* Детальная информация по каждой коменде может быть получена при использовании команды help с передачей
25-
* в качестве параметра ей наименования команды, справку по которой нужно получить.
26-
* @return string - возвращает отформатированную для консоли строку результата.
26+
* Детальная информация по каждой команде может быть получена при использовании команды
27+
* help с передачей в качестве параметра ей наименования команды, справку по которой
28+
* нужно получить.
29+
* @return string - возвращает отформатированную для консоли строку результата.
2730
*/
28-
public function run(): string
31+
public function run(Input $input = null, Output $output = null): string
2932
{
3033
$resultString = "SimpleStub Framework " . SD::green(Application::VERSION) . "\r\n\n";
3134
$resultString .= SD::brown("Usage:\r\n");
3235
$resultString .= "command [options] [arguments]\r\n\n";
3336
$resultString .= SD::brown("Options:\r\n");
3437
$resultString .= " " . str_pad(SD::green("-h, --help"), 32);
35-
$resultString .= "Показать справку для выбранной команды, если команда не задана, будет выполнена команда" . SD::green("list") . "\r\n";
38+
$resultString .= "Показать справку для выбранной команды, если команда не задана, будет выполнена команда"
39+
. SD::green("list") . "\r\n";
3640
$resultString .= " " . str_pad(SD::green("-q, --quiet"), 32);
3741
$resultString .= "Блокировать (не выводить / игнорировать) все сообщения (генерируемые при выполнении команды)\r\n";
3842
$resultString .= " " . str_pad(SD::green("-V, --version"), 32);
3943
$resultString .= "Вывести версию приложения (команда в данном случае не важна)\r\n";
4044
$resultString .= " " . str_pad(SD::green("-n, --no-interaction"), 32);
4145
$resultString .= "Не задавать никаких вопросов (блокировать интерактивный режим)\r\n\n";
4246

43-
$prepareListCommand = $this->getClassesByNamespace("Stub\Framework\Console\Commands\\");
47+
$prepareListCommand = $this->getClassesByNamespace(__NAMESPACE__);
4448
if (empty($prepareListCommand)) {
4549
$resultString .= SD::red("ДОСТУПНЫХ КОМАНД НЕТ!") . "\r\n";
4650
} else {
4751
$resultString .= SD::brown("Available commands:") . "\r\n";
48-
$sortclasses = $this->sortCommandsByGroup($prepareListCommand, "Stub\Framework\Console\Commands\\");
49-
foreach ($sortclasses as $key => $value) {
52+
$sortedAvailableClasses = $this->sortCommandsByGroup($prepareListCommand, __NAMESPACE__);
53+
foreach ($sortedAvailableClasses as $key => $value) {
5054
$resultString .= SD::brown($key) . "\r\n";
51-
foreach ($value as $fclass) {
55+
foreach ($value as $commandClass) {
5256
/** @var Commands $currentClass */
53-
$currentClass = new $fclass();
57+
$currentClass = new $commandClass();
5458
$resultString .= " " . str_pad(SD::green($currentClass->name), 32);
5559
$resultString .= $currentClass->description . "\r\n";
5660
}
5761
}
5862
}
59-
return $resultString;
63+
$output->writeln($resultString);
64+
return "OK";
6065
}
6166

6267
/**
@@ -65,7 +70,7 @@ public function run(): string
6570
* Для работы этого метода используется автозагрузчик ***composer***.
6671
*
6772
* ***Важно!!!***
68-
* Должен быть сгенерирован оптимизированный автозагрузчик, используя -oпцию для работы со всеми классами.
73+
* Должен быть сгенерирован оптимизированный автозагрузчик, используя опцию для работы со всеми классами.
6974
* ***composer dump-autoload -o ***
7075
* @return array
7176
*/
@@ -119,7 +124,7 @@ private function getClassesByNamespace(string $namespace): array
119124
* @return array Двумерный ассоциативный массив где key - это группа команд, value - одномерный
120125
* массив пространств имен классов команд, входящих в группу.
121126
*/
122-
private function sortCommandsByGroup(array $prepareArrayCommandClasses, $namespace): array
127+
private function sortCommandsByGroup(array $prepareArrayCommandClasses, string $namespace): array
123128
{
124129
if (0 !== strpos($namespace, '\\')) {
125130
$namespace = '\\' . $namespace;

src/Console/Commands/Make/MakeNewCustomStubCommand.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@
33
namespace Stub\Framework\Console\Commands\Make;
44

55
use Stub\Framework\Console\Base\Command;
6-
use Stub\Framework\Contracts\Console\Commands;
6+
use Stub\Framework\Console\Base\Input;
7+
use Stub\Framework\Console\Base\Output;
78

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

16-
public function run(): string
17+
public function run(Input $input = null, Output $output = null): string
1718
{
1819
echo "отработал метод" . $this::getName();
1920
return " Ok!";

src/Console/Commands/ResetCommand.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@
33
namespace Stub\Framework\Console\Commands;
44

55
use Stub\Framework\Console\Base\Command;
6-
use Stub\Framework\Contracts\Console\Commands;
6+
use Stub\Framework\Console\Base\Input;
7+
use Stub\Framework\Console\Base\Output;
78

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

16-
public function run(): string
17+
public function run(Input $input = null, Output $output = null): string
1718
{
1819
echo "отработал метод" . $this::getName();
1920
return " Ok!";

0 commit comments

Comments
 (0)