diff --git a/composer.json b/composer.json index aa5b75e..dbfc1b8 100644 --- a/composer.json +++ b/composer.json @@ -11,8 +11,8 @@ ], "require": { "php": "^5.3.9|^7.0", - "puli/repository": "^1.0-beta9", - "puli/discovery": "^1.0-beta9", + "puli/repository": "^1.0-beta10@dev", + "puli/discovery": "^1.0-beta10@dev", "puli/url-generator": "^1.0-beta4", "puli/manager": "^1.0-beta10", "webmozart/console": "^1.0-beta4", diff --git a/src/Handler/BindCommandHandler.php b/src/Handler/BindCommandHandler.php index 71a909f..06449fa 100644 --- a/src/Handler/BindCommandHandler.php +++ b/src/Handler/BindCommandHandler.php @@ -15,7 +15,7 @@ use Puli\Cli\Util\ArgsUtil; use Puli\Cli\Util\StringUtil; use Puli\Discovery\Binding\ClassBinding; -use Puli\Discovery\Binding\ResourceBinding; +use Puli\Repository\Discovery\ResourceBinding; use Puli\Manager\Api\Discovery\BindingDescriptor; use Puli\Manager\Api\Discovery\BindingState; use Puli\Manager\Api\Discovery\DiscoveryManager; diff --git a/src/Handler/FindCommandHandler.php b/src/Handler/FindCommandHandler.php index 7cabe59..cfd9213 100644 --- a/src/Handler/FindCommandHandler.php +++ b/src/Handler/FindCommandHandler.php @@ -13,7 +13,7 @@ use Puli\Cli\Util\StringUtil; use Puli\Discovery\Api\Discovery; -use Puli\Discovery\Binding\ResourceBinding; +use Puli\Repository\Discovery\ResourceBinding; use Puli\Repository\Api\ResourceRepository; use RuntimeException; use Webmozart\Console\Api\Args\Args; @@ -164,7 +164,7 @@ private function findByBindingType($typeName) { $matches = array(); - $expr = Expr::isInstanceOf('Puli\Discovery\Binding\ResourceBinding'); + $expr = Expr::isInstanceOf('Puli\Repository\Discovery\ResourceBinding'); foreach ($this->discovery->findBindings($typeName, $expr) as $binding) { /** @var ResourceBinding $binding */ diff --git a/src/Handler/TypeCommandHandler.php b/src/Handler/TypeCommandHandler.php index 32fcaf1..038917c 100644 --- a/src/Handler/TypeCommandHandler.php +++ b/src/Handler/TypeCommandHandler.php @@ -143,8 +143,9 @@ public function handleDefine(Args $args) $this->parseParamDescriptions($args, $paramDescriptions); $this->parseParams($args, $bindingParams); + $name = $args->getArgument('name'); $this->discoveryManager->addRootTypeDescriptor(new BindingTypeDescriptor( - new BindingType($args->getArgument('name'), $bindingParams), + new BindingType($name, $this->detectBindingClass($name), $bindingParams), $args->getOption('description'), $paramDescriptions ), $flags); @@ -176,7 +177,7 @@ public function handleUpdate(Args $args) } $updatedDescriptor = new BindingTypeDescriptor( - new BindingType($name, $bindingParams), + new BindingType($name, $this->detectBindingClass($name), $bindingParams), $description, $paramDescriptions ); @@ -363,4 +364,19 @@ private function typesEqual(BindingTypeDescriptor $descriptor1, BindingTypeDescr $descriptor1->getParameterDescriptions() === $descriptor2->getParameterDescriptions() && $descriptor1->getType()->getParameters() === $descriptor2->getType()->getParameters(); } + + /** + * Identify what type of binding class $name is. + * + * @param string $name + */ + private function detectBindingClass($name) + { + $bindingClass = 'Puli\Repository\Discovery\ResourceBinding'; + if (class_exists($name) || interface_exists($name)) { + $bindingClass = 'Puli\Discovery\Binding\ClassBinding'; + } + + return $bindingClass; + } } diff --git a/tests/Handler/BindCommandHandlerTest.php b/tests/Handler/BindCommandHandlerTest.php index b9f3a7d..d04702a 100644 --- a/tests/Handler/BindCommandHandlerTest.php +++ b/tests/Handler/BindCommandHandlerTest.php @@ -17,7 +17,7 @@ use Puli\Cli\Tests\Fixtures\Bar; use Puli\Cli\Tests\Fixtures\Foo; use Puli\Discovery\Binding\ClassBinding; -use Puli\Discovery\Binding\ResourceBinding; +use Puli\Repository\Discovery\ResourceBinding; use Puli\Manager\Api\Discovery\BindingDescriptor; use Puli\Manager\Api\Discovery\BindingState; use Puli\Manager\Api\Discovery\DiscoveryManager; @@ -780,7 +780,7 @@ public function testAddResourceBindingWithRelativePath() $this->discoveryManager->expects($this->once()) ->method('addRootBindingDescriptor') ->willReturnCallback(function (BindingDescriptor $descriptor) { - PHPUnit_Framework_Assert::assertInstanceOf('Puli\Discovery\Binding\ResourceBinding', $descriptor->getBinding()); + PHPUnit_Framework_Assert::assertInstanceOf('Puli\Repository\Discovery\ResourceBinding', $descriptor->getBinding()); PHPUnit_Framework_Assert::assertSame('/path', $descriptor->getBinding()->getQuery()); PHPUnit_Framework_Assert::assertSame(Foo::clazz, $descriptor->getBinding()->getTypeName()); PHPUnit_Framework_Assert::assertSame(array(), $descriptor->getBinding()->getParameterValues()); @@ -797,7 +797,7 @@ public function testAddResourceBindingWithAbsolutePath() $this->discoveryManager->expects($this->once()) ->method('addRootBindingDescriptor') ->willReturnCallback(function (BindingDescriptor $descriptor) { - PHPUnit_Framework_Assert::assertInstanceOf('Puli\Discovery\Binding\ResourceBinding', $descriptor->getBinding()); + PHPUnit_Framework_Assert::assertInstanceOf('Puli\Repository\Discovery\ResourceBinding', $descriptor->getBinding()); PHPUnit_Framework_Assert::assertSame('/path', $descriptor->getBinding()->getQuery()); PHPUnit_Framework_Assert::assertSame(Foo::clazz, $descriptor->getTypeName()); PHPUnit_Framework_Assert::assertSame(array(), $descriptor->getBinding()->getParameterValues()); @@ -814,7 +814,7 @@ public function testAddResourceBindingWithLanguage() $this->discoveryManager->expects($this->once()) ->method('addRootBindingDescriptor') ->willReturnCallback(function (BindingDescriptor $descriptor) { - PHPUnit_Framework_Assert::assertInstanceOf('Puli\Discovery\Binding\ResourceBinding', $descriptor->getBinding()); + PHPUnit_Framework_Assert::assertInstanceOf('Puli\Repository\Discovery\ResourceBinding', $descriptor->getBinding()); PHPUnit_Framework_Assert::assertSame('/path', $descriptor->getBinding()->getQuery()); PHPUnit_Framework_Assert::assertSame(Foo::clazz, $descriptor->getTypeName()); PHPUnit_Framework_Assert::assertSame(array(), $descriptor->getBinding()->getParameterValues()); @@ -863,7 +863,7 @@ public function testAddBindingWithParameters() $this->discoveryManager->expects($this->once()) ->method('addRootBindingDescriptor') ->willReturnCallback(function (BindingDescriptor $descriptor) { - PHPUnit_Framework_Assert::assertInstanceOf('Puli\Discovery\Binding\ResourceBinding', $descriptor->getBinding()); + PHPUnit_Framework_Assert::assertInstanceOf('Puli\Repository\Discovery\ResourceBinding', $descriptor->getBinding()); PHPUnit_Framework_Assert::assertSame('/path', $descriptor->getBinding()->getQuery()); PHPUnit_Framework_Assert::assertSame(Foo::clazz, $descriptor->getTypeName()); PHPUnit_Framework_Assert::assertSame(array( @@ -897,7 +897,7 @@ public function testAddBindingForce() $this->discoveryManager->expects($this->once()) ->method('addRootBindingDescriptor') ->willReturnCallback(function (BindingDescriptor $descriptor, $flags) { - PHPUnit_Framework_Assert::assertInstanceOf('Puli\Discovery\Binding\ResourceBinding', $descriptor->getBinding()); + PHPUnit_Framework_Assert::assertInstanceOf('Puli\Repository\Discovery\ResourceBinding', $descriptor->getBinding()); PHPUnit_Framework_Assert::assertSame('/path', $descriptor->getBinding()->getQuery()); PHPUnit_Framework_Assert::assertSame(Foo::clazz, $descriptor->getTypeName()); PHPUnit_Framework_Assert::assertSame(array(), $descriptor->getBinding()->getParameterValues()); @@ -929,7 +929,7 @@ public function testUpdateResourceBinding() $this->discoveryManager->expects($this->at(1)) ->method('addRootBindingDescriptor') ->willReturnCallback(function (BindingDescriptor $descriptor, $flags) use ($uuid) { - PHPUnit_Framework_Assert::assertInstanceOf('Puli\Discovery\Binding\ResourceBinding', $descriptor->getBinding()); + PHPUnit_Framework_Assert::assertInstanceOf('Puli\Repository\Discovery\ResourceBinding', $descriptor->getBinding()); PHPUnit_Framework_Assert::assertSame($uuid, $descriptor->getUuid()); PHPUnit_Framework_Assert::assertSame('/new', $descriptor->getBinding()->getQuery()); PHPUnit_Framework_Assert::assertSame('my/other', $descriptor->getTypeName()); @@ -960,7 +960,7 @@ public function testUpdateResourceBindingWithRelativePath() $this->discoveryManager->expects($this->at(1)) ->method('addRootBindingDescriptor') ->willReturnCallback(function (BindingDescriptor $descriptor, $flags) { - PHPUnit_Framework_Assert::assertInstanceOf('Puli\Discovery\Binding\ResourceBinding', $descriptor->getBinding()); + PHPUnit_Framework_Assert::assertInstanceOf('Puli\Repository\Discovery\ResourceBinding', $descriptor->getBinding()); PHPUnit_Framework_Assert::assertSame('/new', $descriptor->getBinding()->getQuery()); PHPUnit_Framework_Assert::assertSame(Foo::clazz, $descriptor->getTypeName()); PHPUnit_Framework_Assert::assertSame(array(), $descriptor->getBinding()->getParameterValues()); @@ -1026,7 +1026,7 @@ public function testUpdateBindingWithUnsetParameter() $this->discoveryManager->expects($this->at(1)) ->method('addRootBindingDescriptor') ->willReturnCallback(function (BindingDescriptor $descriptor, $flags) { - PHPUnit_Framework_Assert::assertInstanceOf('Puli\Discovery\Binding\ResourceBinding', $descriptor->getBinding()); + PHPUnit_Framework_Assert::assertInstanceOf('Puli\Repository\Discovery\ResourceBinding', $descriptor->getBinding()); PHPUnit_Framework_Assert::assertSame('/path', $descriptor->getBinding()->getQuery()); PHPUnit_Framework_Assert::assertSame(Foo::clazz, $descriptor->getTypeName()); PHPUnit_Framework_Assert::assertSame(array('param1' => 'value1'), $descriptor->getBinding()->getParameterValues()); @@ -1053,7 +1053,7 @@ public function testUpdateBindingForce() $this->discoveryManager->expects($this->at(1)) ->method('addRootBindingDescriptor') ->willReturnCallback(function (BindingDescriptor $descriptor, $flags) { - PHPUnit_Framework_Assert::assertInstanceOf('Puli\Discovery\Binding\ResourceBinding', $descriptor->getBinding()); + PHPUnit_Framework_Assert::assertInstanceOf('Puli\Repository\Discovery\ResourceBinding', $descriptor->getBinding()); PHPUnit_Framework_Assert::assertSame('/new', $descriptor->getBinding()->getQuery()); PHPUnit_Framework_Assert::assertSame(Foo::clazz, $descriptor->getTypeName()); PHPUnit_Framework_Assert::assertSame(array(), $descriptor->getBinding()->getParameterValues()); diff --git a/tests/Handler/FindCommandHandlerTest.php b/tests/Handler/FindCommandHandlerTest.php index 4558f71..2c45bc0 100644 --- a/tests/Handler/FindCommandHandlerTest.php +++ b/tests/Handler/FindCommandHandlerTest.php @@ -14,9 +14,8 @@ use PHPUnit_Framework_MockObject_MockObject; use Puli\Cli\Handler\FindCommandHandler; use Puli\Discovery\Api\Discovery; -use Puli\Discovery\Api\Type\BindingType; -use Puli\Discovery\Binding\ResourceBinding; use Puli\Repository\Api\ResourceRepository; +use Puli\Repository\Discovery\ResourceBinding; use Puli\Repository\Resource\Collection\ArrayResourceCollection; use Puli\Repository\Resource\DirectoryResource; use Puli\Repository\Resource\FileResource; @@ -249,7 +248,7 @@ public function testFindByBindingType() ))); $this->discovery->expects($this->once()) ->method('findBindings') - ->with('vendor/type', Expr::isInstanceOf('Puli\Discovery\Binding\ResourceBinding')) + ->with('vendor/type', Expr::isInstanceOf('Puli\Repository\Discovery\ResourceBinding')) ->willReturn(array($binding1, $binding2)); $statusCode = $this->handler->handle($args, $this->io); @@ -319,7 +318,7 @@ public function testFindByBindingTypeAndClass() ))); $this->discovery->expects($this->once()) ->method('findBindings') - ->with('vendor/type', Expr::isInstanceOf('Puli\Discovery\Binding\ResourceBinding')) + ->with('vendor/type', Expr::isInstanceOf('Puli\Repository\Discovery\ResourceBinding')) ->willReturn(array($binding1, $binding2)); $statusCode = $this->handler->handle($args, $this->io); @@ -339,7 +338,6 @@ public function testFindByBindingTypeAndClass() public function testFindByPathAndBindingType() { $args = self::$findCommand->parseArgs(new StringArgs('--path *pattern* --language xpath --type vendor/type')); - $type = new BindingType('vendor/type'); $binding1 = new ResourceBinding('/path1', 'vendor/type'); $binding2 = new ResourceBinding('/path2', 'vendor/type'); @@ -374,7 +372,7 @@ public function testFindByPathAndBindingType() $this->discovery->expects($this->once()) ->method('findBindings') - ->with('vendor/type', Expr::isInstanceOf('Puli\Discovery\Binding\ResourceBinding')) + ->with('vendor/type', Expr::isInstanceOf('Puli\Repository\Discovery\ResourceBinding')) ->willReturn(array($binding1, $binding2)); $statusCode = $this->handler->handle($args, $this->io); diff --git a/tests/Handler/TypeCommandHandlerTest.php b/tests/Handler/TypeCommandHandlerTest.php index 886212a..a8a8628 100644 --- a/tests/Handler/TypeCommandHandlerTest.php +++ b/tests/Handler/TypeCommandHandlerTest.php @@ -35,6 +35,8 @@ */ class TypeCommandHandlerTest extends AbstractCommandHandlerTest { + const RESOURCE_BINDING = 'Puli\Repository\Discovery\ResourceBinding'; + /** * @var Command */ @@ -97,7 +99,7 @@ protected function setUp() ->willReturnCallback($this->returnFromMap(array( array($this->packageAndState('vendor/root', BindingTypeState::ENABLED), array( new BindingTypeDescriptor( - new BindingType('root/enabled1', array( + new BindingType('root/enabled1', self::RESOURCE_BINDING, array( new BindingParameter('req-param', BindingParameter::REQUIRED), new BindingParameter('opt-param', BindingParameter::OPTIONAL, 'default'), )), @@ -107,22 +109,22 @@ protected function setUp() 'opt-param' => 'Description of opt-param', ) ), - new BindingTypeDescriptor(new BindingType('root/enabled2'), 'Description of root/enabled2'), + new BindingTypeDescriptor(new BindingType('root/enabled2', self::RESOURCE_BINDING), 'Description of root/enabled2'), )), array($this->packageAndState('vendor/root', BindingTypeState::DUPLICATE), array( - new BindingTypeDescriptor(new BindingType('root/duplicate')), + new BindingTypeDescriptor(new BindingType('root/duplicate', self::RESOURCE_BINDING)), )), array($this->packageAndState('vendor/package1', BindingTypeState::ENABLED), array( - new BindingTypeDescriptor(new BindingType('package1/enabled')), + new BindingTypeDescriptor(new BindingType('package1/enabled', self::RESOURCE_BINDING)), )), array($this->packageAndState('vendor/package1', BindingTypeState::DUPLICATE), array( - new BindingTypeDescriptor(new BindingType('package1/duplicate')), + new BindingTypeDescriptor(new BindingType('package1/duplicate', self::RESOURCE_BINDING)), )), array($this->packageAndState('vendor/package2', BindingTypeState::ENABLED), array( - new BindingTypeDescriptor(new BindingType('package2/enabled')), + new BindingTypeDescriptor(new BindingType('package2/enabled', self::RESOURCE_BINDING)), )), array($this->packageAndState('vendor/package2', BindingTypeState::DUPLICATE), array( - new BindingTypeDescriptor(new BindingType('package2/duplicate')), + new BindingTypeDescriptor(new BindingType('package2/duplicate', self::RESOURCE_BINDING)), )), ))); } @@ -476,7 +478,7 @@ public function testDefineType() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') - ->with(new BindingTypeDescriptor(new BindingType('my/type'))); + ->with(new BindingTypeDescriptor(new BindingType('my/type', self::RESOURCE_BINDING))); $this->assertSame(0, $this->handler->handleDefine($args)); } @@ -487,7 +489,7 @@ public function testDefineTypeWithDescription() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') - ->with(new BindingTypeDescriptor(new BindingType('my/type'), 'The description')); + ->with(new BindingTypeDescriptor(new BindingType('my/type', self::RESOURCE_BINDING), 'The description')); $this->assertSame(0, $this->handler->handleDefine($args)); } @@ -498,7 +500,7 @@ public function testDefineTypeWithRequiredParameter() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') - ->with(new BindingTypeDescriptor(new BindingType('my/type', array( + ->with(new BindingTypeDescriptor(new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('required', BindingParameter::REQUIRED), )))); @@ -511,7 +513,7 @@ public function testDefineTypeWithOptionalParameter() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') - ->with(new BindingTypeDescriptor(new BindingType('my/type', array( + ->with(new BindingTypeDescriptor(new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('optional', BindingParameter::OPTIONAL, true), )))); @@ -525,7 +527,7 @@ public function testDefineTypeWithParameterDescription() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') ->with(new BindingTypeDescriptor( - new BindingType('my/type', array( + new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('param', BindingParameter::REQUIRED), )), null, @@ -543,7 +545,7 @@ public function testDefineTypeForce() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') - ->with(new BindingTypeDescriptor(new BindingType('my/type')), DiscoveryManager::OVERRIDE); + ->with(new BindingTypeDescriptor(new BindingType('my/type', self::RESOURCE_BINDING)), DiscoveryManager::OVERRIDE); $this->assertSame(0, $this->handler->handleDefine($args)); } @@ -552,7 +554,7 @@ public function testUpdateTypeDescription() { $args = self::$updateCommand->parseArgs(new StringArgs('my/type --description "New description"')); - $typeDescriptor = new BindingTypeDescriptor(new BindingType('my/type'), 'Old description'); + $typeDescriptor = new BindingTypeDescriptor(new BindingType('my/type', self::RESOURCE_BINDING), 'Old description'); $typeDescriptor->load($this->packages->getRootPackage()); $this->discoveryManager->expects($this->once()) @@ -562,7 +564,7 @@ public function testUpdateTypeDescription() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') - ->with(new BindingTypeDescriptor(new BindingType('my/type'), 'New description'), DiscoveryManager::OVERRIDE); + ->with(new BindingTypeDescriptor(new BindingType('my/type', self::RESOURCE_BINDING), 'New description'), DiscoveryManager::OVERRIDE); $this->assertSame(0, $this->handler->handleUpdate($args)); } @@ -572,7 +574,7 @@ public function testUpdateTypeOptionalParameterToRequired() $args = self::$updateCommand->parseArgs(new StringArgs('my/type --param param')); $typeDescriptor = new BindingTypeDescriptor( - new BindingType('my/type', array( + new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('param', BindingParameter::OPTIONAL, 'default'), )), null, @@ -588,7 +590,7 @@ public function testUpdateTypeOptionalParameterToRequired() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') ->with(new BindingTypeDescriptor( - new BindingType('my/type', array( + new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('param', BindingParameter::REQUIRED), )), null, @@ -603,7 +605,7 @@ public function testUpdateTypeRequiredParameterToOptional() $args = self::$updateCommand->parseArgs(new StringArgs('my/type --param param=foobar')); $typeDescriptor = new BindingTypeDescriptor( - new BindingType('my/type', array( + new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('param', BindingParameter::REQUIRED), )), null, @@ -619,7 +621,7 @@ public function testUpdateTypeRequiredParameterToOptional() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') ->with(new BindingTypeDescriptor( - new BindingType('my/type', array( + new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('param', BindingParameter::OPTIONAL, 'foobar'), )), null, @@ -634,7 +636,7 @@ public function testUpdateTypeChangeParameterDescription() $args = self::$updateCommand->parseArgs(new StringArgs('my/type --param-description param="New description"')); $typeDescriptor = new BindingTypeDescriptor( - new BindingType('my/type', array( + new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('param', BindingParameter::REQUIRED), )), null, @@ -650,7 +652,7 @@ public function testUpdateTypeChangeParameterDescription() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') ->with(new BindingTypeDescriptor( - new BindingType('my/type', array( + new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('param', BindingParameter::REQUIRED), )), null, @@ -665,7 +667,7 @@ public function testUpdateTypeRemoveParameter() $args = self::$updateCommand->parseArgs(new StringArgs('my/type --unset-param param2')); $typeDescriptor = new BindingTypeDescriptor( - new BindingType('my/type', array( + new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('param1', BindingParameter::REQUIRED), new BindingParameter('param2', BindingParameter::OPTIONAL), )) @@ -680,7 +682,7 @@ public function testUpdateTypeRemoveParameter() $this->discoveryManager->expects($this->once()) ->method('addRootTypeDescriptor') ->with(new BindingTypeDescriptor( - new BindingType('my/type', array( + new BindingType('my/type', self::RESOURCE_BINDING, array( new BindingParameter('param1', BindingParameter::REQUIRED), )) ), DiscoveryManager::OVERRIDE); @@ -695,7 +697,7 @@ public function testUpdateTypeFailsIfNoChanges() { $args = self::$updateCommand->parseArgs(new StringArgs('my/type')); - $typeDescriptor = new BindingTypeDescriptor(new BindingType('my/type')); + $typeDescriptor = new BindingTypeDescriptor(new BindingType('my/type', self::RESOURCE_BINDING)); $typeDescriptor->load($this->packages->getRootPackage()); $this->discoveryManager->expects($this->once())