Implemented contexts, optimizations
This commit is contained in:
86
lib/Context.php
Normal file
86
lib/Context.php
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace NoccyLabs\Shell;
|
||||
|
||||
class Context
|
||||
{
|
||||
protected $name;
|
||||
|
||||
protected $commands = [];
|
||||
|
||||
protected $data = [];
|
||||
|
||||
|
||||
public function __construct($name=null, array $data=[])
|
||||
{
|
||||
$this->name = $name;
|
||||
$this->data = $data;
|
||||
$this->configure();
|
||||
}
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
// Override this to do setup stuff
|
||||
}
|
||||
|
||||
public function addCommand($command, callable $handler)
|
||||
{
|
||||
$this->commands[$command] = $handler;
|
||||
}
|
||||
|
||||
public function addCommands(array $commands)
|
||||
{
|
||||
foreach ($commands as $command=>$handler) {
|
||||
// Make it easier to connect commands direct to local functions
|
||||
if (is_string($handler) && is_callable([$this,$handler])) {
|
||||
$handler = [ $this,$handler ];
|
||||
}
|
||||
// Add the command to the command list
|
||||
$this->addCommand($handler);
|
||||
}
|
||||
}
|
||||
|
||||
public function hasCommand($command)
|
||||
{
|
||||
return array_key_exists($command, $this->commands);
|
||||
}
|
||||
|
||||
public function getCommand($command)
|
||||
{
|
||||
return $this->commands[$command];
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function __get($key)
|
||||
{
|
||||
if (!array_key_exists($key,$this->data)) {
|
||||
return false;
|
||||
}
|
||||
return $this->data[$key];
|
||||
}
|
||||
|
||||
public function __set($key,$value)
|
||||
{
|
||||
$this->data[$key] = $value;
|
||||
}
|
||||
|
||||
public function __isset($key)
|
||||
{
|
||||
return array_key_exists($key);
|
||||
}
|
||||
|
||||
public function __unset($key)
|
||||
{
|
||||
unset($this->data[$key]);
|
||||
}
|
||||
|
||||
public function getData()
|
||||
{
|
||||
return $this->data;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user