Skip to content

Commit

Permalink
Require Puli's Composer plugin so that consumers don't have to
Browse files Browse the repository at this point in the history
  • Loading branch information
mnapoli committed Jan 3, 2016
1 parent c1a7747 commit 55b76b7
Show file tree
Hide file tree
Showing 4 changed files with 193 additions and 13 deletions.
9 changes: 6 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@
"php": "^5.5|^7.0",
"php-di/php-di": "^5.2",
"doctrine/cache": "^1.4",
"puli/repository": "^1.0.0-beta8@beta",
"puli/discovery": "^1.0.0-beta8@beta"
"puli/repository": "^1.0.0-beta8",
"puli/discovery": "^1.0.0-beta8",
"puli/composer-plugin": "^1.0.0-beta8"
},
"require-dev": {
"phpunit/phpunit": "^4.8"
}
},
"minimum-stability": "beta",
"prefer-stable": true
}
160 changes: 160 additions & 0 deletions puli.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,168 @@
{
"version": "1.0",
"name": "php-di/kernel",
"binding-types": {
"php-di/configuration": {
"description": "PHP-DI configuration file"
}
},
"config": {
"bootstrap-file": "vendor/autoload.php"
},
"packages": {
"container-interop/container-interop": {
"install-path": "vendor/container-interop/container-interop",
"installer": "composer"
},
"doctrine/cache": {
"install-path": "vendor/doctrine/cache",
"installer": "composer"
},
"doctrine/instantiator": {
"install-path": "vendor/doctrine/instantiator",
"installer": "composer",
"env": "dev"
},
"php-di/invoker": {
"install-path": "vendor/php-di/invoker",
"installer": "composer"
},
"php-di/php-di": {
"install-path": "vendor/php-di/php-di",
"installer": "composer"
},
"php-di/phpdoc-reader": {
"install-path": "vendor/php-di/phpdoc-reader",
"installer": "composer"
},
"phpdocumentor/reflection-docblock": {
"install-path": "vendor/phpdocumentor/reflection-docblock",
"installer": "composer",
"env": "dev"
},
"phpspec/prophecy": {
"install-path": "vendor/phpspec/prophecy",
"installer": "composer",
"env": "dev"
},
"phpunit/php-code-coverage": {
"install-path": "vendor/phpunit/php-code-coverage",
"installer": "composer",
"env": "dev"
},
"phpunit/php-file-iterator": {
"install-path": "vendor/phpunit/php-file-iterator",
"installer": "composer",
"env": "dev"
},
"phpunit/php-text-template": {
"install-path": "vendor/phpunit/php-text-template",
"installer": "composer",
"env": "dev"
},
"phpunit/php-timer": {
"install-path": "vendor/phpunit/php-timer",
"installer": "composer",
"env": "dev"
},
"phpunit/php-token-stream": {
"install-path": "vendor/phpunit/php-token-stream",
"installer": "composer",
"env": "dev"
},
"phpunit/phpunit": {
"install-path": "vendor/phpunit/phpunit",
"installer": "composer",
"env": "dev"
},
"phpunit/phpunit-mock-objects": {
"install-path": "vendor/phpunit/phpunit-mock-objects",
"installer": "composer",
"env": "dev"
},
"puli/composer-plugin": {
"install-path": "vendor/puli/composer-plugin",
"installer": "composer"
},
"puli/discovery": {
"install-path": "vendor/puli/discovery",
"installer": "composer"
},
"puli/repository": {
"install-path": "vendor/puli/repository",
"installer": "composer"
},
"puli/url-generator": {
"install-path": "vendor/puli/url-generator",
"installer": "composer"
},
"ramsey/uuid": {
"install-path": "vendor/ramsey/uuid",
"installer": "composer"
},
"sebastian/comparator": {
"install-path": "vendor/sebastian/comparator",
"installer": "composer",
"env": "dev"
},
"sebastian/diff": {
"install-path": "vendor/sebastian/diff",
"installer": "composer",
"env": "dev"
},
"sebastian/environment": {
"install-path": "vendor/sebastian/environment",
"installer": "composer",
"env": "dev"
},
"sebastian/exporter": {
"install-path": "vendor/sebastian/exporter",
"installer": "composer",
"env": "dev"
},
"sebastian/global-state": {
"install-path": "vendor/sebastian/global-state",
"installer": "composer",
"env": "dev"
},
"sebastian/recursion-context": {
"install-path": "vendor/sebastian/recursion-context",
"installer": "composer",
"env": "dev"
},
"sebastian/version": {
"install-path": "vendor/sebastian/version",
"installer": "composer",
"env": "dev"
},
"symfony/process": {
"install-path": "vendor/symfony/process",
"installer": "composer"
},
"symfony/yaml": {
"install-path": "vendor/symfony/yaml",
"installer": "composer",
"env": "dev"
},
"webmozart/assert": {
"install-path": "vendor/webmozart/assert",
"installer": "composer"
},
"webmozart/expression": {
"install-path": "vendor/webmozart/expression",
"installer": "composer"
},
"webmozart/glob": {
"install-path": "vendor/webmozart/glob",
"installer": "composer"
},
"webmozart/key-value-store": {
"install-path": "vendor/webmozart/key-value-store",
"installer": "composer"
},
"webmozart/path-util": {
"install-path": "vendor/webmozart/path-util",
"installer": "composer"
}
}
}
16 changes: 14 additions & 2 deletions src/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,18 @@ class Kernel
*/
const PULI_BINDING_NAME = 'php-di/configuration';

/**
* If null, defaults to the constant PULI_FACTORY_CLASS defined by Puli.
*
* @var string|null
*/
private $puliFactoryClass;

public function setPuliFactoryClass($class)
{
$this->puliFactoryClass = $class;
}

/**
* Configure and create a container using all configuration files registered under
* the `php-di/configuration` binding type in Puli.
Expand All @@ -34,12 +46,12 @@ class Kernel
*/
public function createContainer()
{
if (!defined('PULI_FACTORY_CLASS')) {
if (!$this->puliFactoryClass && !defined('PULI_FACTORY_CLASS')) {
throw new \RuntimeException('Puli is not installed');
}

// Create Puli objects
$factoryClass = PULI_FACTORY_CLASS;
$factoryClass = $this->puliFactoryClass ?: PULI_FACTORY_CLASS;
$factory = new $factoryClass();
/** @var ResourceRepository $repository */
$repository = $factory->createRepository();
Expand Down
21 changes: 13 additions & 8 deletions tests/KernelTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,35 @@

class KernelTest extends \PHPUnit_Framework_TestCase
{
/**
* @var Kernel
*/
private $kernel;

public function setUp()
{
if (!defined('PULI_FACTORY_CLASS')) {
define('PULI_FACTORY_CLASS', PuliFactoryClass::class);
}

PuliFactoryClass::$repository = new InMemoryRepository();
PuliFactoryClass::$discovery = new InMemoryDiscovery();

$this->kernel = new Kernel();
// Mock the Puli factory
$this->kernel->setPuliFactoryClass(PuliFactoryClass::class);
}

/**
* @test
*/
public function creates_a_container()
{
$this->assertInstanceOf('DI\Container', (new Kernel())->createContainer());
$this->assertInstanceOf('DI\Container', $this->kernel->createContainer());
}

/**
* @test
*/
public function registers_puli_repository()
{
$container = (new Kernel())->createContainer();
$container = $this->kernel->createContainer();
$this->assertInstanceOf(ResourceRepository::class, $container->get(ResourceRepository::class));
}

Expand All @@ -46,7 +51,7 @@ public function registers_puli_repository()
*/
public function registers_puli_discovery()
{
$container = (new Kernel())->createContainer();
$container = $this->kernel->createContainer();
$this->assertInstanceOf(Discovery::class, $container->get(Discovery::class));
}

Expand All @@ -58,7 +63,7 @@ public function registers_module_configuration_files()
$this->createPuliResource('/blog/config.php', __DIR__.'/Fixture/config.php');
$this->bindPuliResource('/blog/config.php', Kernel::PULI_BINDING_NAME);

$container = (new Kernel())->createContainer();
$container = $this->kernel->createContainer();
$this->assertEquals('bar', $container->get('foo'));
}

Expand Down

0 comments on commit 55b76b7

Please sign in to comment.