magallanes/Mage/Command/AbstractCommand.php
2015-05-16 14:06:19 +02:00

192 lines
4.1 KiB
PHP

<?php
/*
* This file is part of the Magallanes package.
*
* (c) Andrés Montañez <andres@andresmontanez.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Mage\Command;
use Mage\Config;
/**
* Abstract Class for a Magallanes Command
*
* @author Andrés Montañez <andres@andresmontanez.com>
*/
abstract class AbstractCommand
{
/**
* Instance of the loaded Configuration.
*
* @var \Mage\Config
*/
protected $config = null;
/**
* Command's help message
*
* @var string
*/
private $helpMessage;
/**
* Usage examples.
*
* @var array
*/
private $usageExamples = array();
/**
* Command's syntax message
*
* @var string
*/
private $syntaxMessage;
/**
* Command name
*
* @var string
*/
private $name;
/**
* Runs the Command
* @return integer exit code
* @throws \Exception
*/
abstract public function run();
/**
* Sets the Loaded Configuration.
*
* @param Config $config
*/
public function setConfig(Config $config)
{
$this->config = $config;
}
/**
* Gets the Loaded Configuration.
*
* @return Config
*/
public function getConfig()
{
return $this->config;
}
/**
* Sets command name
*
* @param string $name Command name
* @return $this
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Sets command's help message
*
* @param string $message Command's help message
* @return $this
*/
public function setHelpMessage($message)
{
$this->helpMessage = $message;
return $this;
}
/**
* Adds command's usage example
*
* @param string $snippet Example's snippet
* @param string $description Example's description
* @return $this
*/
public function addUsageExample($snippet, $description = '')
{
array_push($this->usageExamples, array($snippet, $description));
return $this;
}
/**
* Sets command's syntax message
*
* @param string $message Syntax message
* @return $this
*/
public function setSyntaxMessage($message)
{
$this->syntaxMessage = $message;
return $this;
}
/**
* Returns formatted command info
*
* @return string
*/
public function getInfoMessage()
{
$indent = str_repeat(" ", 4);
$output = "";
if (!empty($this->name)) {
$output .= "\n";
$output .= "<cyan><bold>Command: </bold></cyan>";
$output .= $this->name;
}
if (!empty($this->helpMessage)) {
$output .= "\n";
$output .= "<light_blue>{$this->helpMessage}</light_blue>\n";
}
if (!empty($this->syntaxMessage)) {
$output .= "\n";
$output .= "<light_gray><bold>Syntax:</bold></light_gray>\n";
$output .= "$indent<light_green>{$this->syntaxMessage}</light_green>";
$output .= "\n";
}
if (!empty($this->usageExamples)) {
$output .= "\n";
$output .= "<light_gray><bold>Usage examples:</bold></light_gray>\n";
foreach ($this->usageExamples as $example) {
$snippet = $example[0];
$description = $example[1];
$output .= "$indent* ";
if (!empty($description)) {
$description = rtrim($description, ': ') . ":";
$output .= $description;
$output .= "\n$indent$indent";
}
$output .= "<green>$snippet</green>";
$output .= "\n";
}
}
if (empty($output)) {
$output .= "\n";
$output .= "<red><bold>Sorry, there's no help for this command at the moment.</bold></red>";
$output .= "\n";
}
return $output;
}
}