Skip to content

Commit

Permalink
Allow applications using Robo as a framework to supply thier own appl…
Browse files Browse the repository at this point in the history
…ication name and version (if they let Robo set up the DI container), or even a complete application object (if they set up their own DI container).
  • Loading branch information
greg-1-anderson committed Aug 25, 2016
1 parent 7d1e6e0 commit 438604e
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 19 deletions.
36 changes: 26 additions & 10 deletions src/Robo.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
*/
class Robo
{
const VERSION = '1.0.0-RC1';
const APPLICATION_NAME = 'Robo';
const VERSION = '1.0.0-RC2';

/**
* The currently active container object, or NULL if not initialized yet.
Expand Down Expand Up @@ -71,11 +72,12 @@ public static function hasContainer()
/**
* Create a container and initiailze it.
*/
public static function createDefaultContainer($input = null, $output = null)
public static function createDefaultContainer($input = null, $output = null, $appName = null, $appVersion = null)
{
// Set up our dependency injection container.
$container = new Container();
static::configureContainer($container, $input, $output);
$app = static::createDefaultApplication($appName, $appVersion);
static::configureContainer($container, $input, $output, $app);
static::setContainer($container);

return $container;
Expand All @@ -84,7 +86,7 @@ public static function createDefaultContainer($input = null, $output = null)
/**
* Initialize a container with all of the default Robo services.
*/
public static function configureContainer($container, $input = null, $output = null)
public static function configureContainer($container, $input = null, $output = null, $app = null)
{
// Self-referential container refernce for the inflector
$container->add('container', $container);
Expand Down Expand Up @@ -126,13 +128,22 @@ public static function configureContainer($container, $input = null, $output = n
->withMethodCall('setCommandProcessor', ['commandProcessor']);
$container->add('collection', \Robo\Collection\Collection::class);
$container->add('collectionBuilder', \Robo\Collection\CollectionBuilder::class);
$container->share('application', \Robo\Application::class)
->withArgument('Robo')
->withArgument(self::VERSION)
->withMethodCall('setAutoExit', [false])
->withMethodCall('setDispatcher', ['eventDispatcher']);

static::addInflectors($container);

if (!$app) {
$app = static::createDefaultApplication();
}
$app->setAutoExit(false);
$app->setDispatcher($container->get('eventDispatcher'));
$container->share('application', $app);
}

protected static function createDefaultApplication($appName = null, $appVersion = null)
{
$appName = $appName ?: self::APPLICATION_NAME;
$appVersion = $appVersion ?: self::VERSION;

return new \Robo\Application($appName, $appVersion);
}

/**
Expand Down Expand Up @@ -208,6 +219,11 @@ public static function logger()
return static::service('logger');
}

public static function application()
{
return static::service('application');
}

/**
* Return the output object.
*
Expand Down
19 changes: 10 additions & 9 deletions src/Runner.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,15 @@ protected function loadRoboFile()
return true;
}

public function execute($argv, $output = null)
public function execute($argv, $output = null, $appName = null, $appVersion = null)
{
$argv = $this->shebang($argv);
$input = $this->prepareInput($argv);
return $this->run($input, $output);
$app = $this->init($input, $output, $appName, $appVersion);
return $this->run($input, $output, $app);
}

public function run($input = null, $output = null)
public function run($input = null, $output = null, $app = null)
{
// Create default input and output objects if they were not provided
if (!$input) {
Expand All @@ -95,24 +96,24 @@ public function run($input = null, $output = null)
if (!$output) {
$output = new \Symfony\Component\Console\Output\ConsoleOutput();
}
if (!$app) {
$app = Robo::application();
}

$app = $this->init($input, $output);
$statusCode = $app->run($input, $output);
return $statusCode;
}

public function init($input, $output)
public function init($input, $output, $appName = null, $appVersion = null)
{
// If we were not provided a container, then create one
if (!Robo::hasContainer()) {
Robo::createDefaultContainer($input, $output);
Robo::createDefaultContainer($input, $output, $appName, $appVersion);
// Automatically register a shutdown function and
// an error handler when we provide the container.
$this->installRoboHandlers();
}
$container = Robo::getContainer();
$app = $container->get('application');

$app = Robo::application();
$this->registerRoboFileCommands($app);
return $app;
}
Expand Down

0 comments on commit 438604e

Please sign in to comment.