degraciamathieu / clike
This package allows you to run a class with a design pattern similar to a command system
Requires
- php: >=7.1.0
Requires (Dev)
- mockery/mockery: ^1.3
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2023-03-29 00:28:15 UTC
README
DeGraciaMathieu/Clike
The command design pattern is useful to create modular components for a command line shell application that can be expanded with more functionality implemented later by separate modules.
Installation
Run in console below command to download package to your project:
composer require degraciamathieu/clike
Usage
Create a command
A command is a class that must implement the interface DeGraciaMathieu\Clike\Contracts\Command::class
.
The following example is a valid command.
use DeGraciaMathieu\Clike\Lines; use DeGraciaMathieu\Clike\Contracts; class Clear implements Contracts\Command { /** * Get the command description */ public function description() :string { return 'Command description...'; } /** * Check if the command is executable */ public function authorized() :bool { return true; } /** * Bind of this command */ public function binding() :string { return '/clear'; } /** * Code executed by this command */ public function process() :void { // } /** * Output of this command */ public function output() :array { return [ new Lines\Info('Output text...'), ]; } }
Execute a command
Now let's play with our Clear command.
use DeGraciaMathieu\Clike\Command; $command = new Command(); $command->execute(new Clear());
After checking that we can use this command with the authorized
method this code will execute the process
method of our command.
To finally execute the output
method displaying the following result.
// array:2 [ // "timestamp" => 1531339693 // "lines" => array:1 [ // 0 => array:2 [ // "type" => "info" // "content" => "Output text..." // ] // ] // ]
Execute a command with Terminal
use DeGraciaMathieu\Clike\Terminal; $terminal = new Terminal([ Clear::class, ]); $terminal->execute('/clear');
Retrieve all available commands with Terminal
use DeGraciaMathieu\Clike\Terminal; $terminal = new Terminal([ Clear::class, ]); $terminal->getAvailableCommands(); // [ // [ // "binding" => "/clear" // "description" => "Command description..." // ] // ]