diff --git a/src/Composer/Repository/ArrayRepository.php b/src/Composer/Repository/ArrayRepository.php index fb7025e9f..fcffc72af 100644 --- a/src/Composer/Repository/ArrayRepository.php +++ b/src/Composer/Repository/ArrayRepository.php @@ -23,6 +23,26 @@ class ArrayRepository implements RepositoryInterface { protected $packages; + /** + * Checks if specified package in this repository. + * + * @param PackageInterface $package package instance + * + * @return Boolean + */ + public function hasPackage(PackageInterface $package) + { + $packageId = $package->getUniqueName(); + + foreach ($this->getPackages() as $repoPackage) { + if ($packageId === $repoPackage->getUniqueName()) { + return true; + } + } + + return false; + } + /** * Adds a new package to the repository * @@ -37,6 +57,24 @@ class ArrayRepository implements RepositoryInterface $this->packages[] = $package; } + /** + * Removes package from repository. + * + * @param PackageInterface $package package instance + */ + public function removePackage(PackageInterface $package) + { + $packageId = $package->getUniqueName(); + + foreach ($this->getPackages() as $key => $repoPackage) { + if ($packageId === $repoPackage->getUniqueName()) { + array_splice($this->packages, $key, 1); + + return; + } + } + } + /** * Returns all contained packages * diff --git a/tests/Composer/Test/Repository/ArrayRepositoryTest.php b/tests/Composer/Test/Repository/ArrayRepositoryTest.php index 7c9f64947..64e62fff2 100644 --- a/tests/Composer/Test/Repository/ArrayRepositoryTest.php +++ b/tests/Composer/Test/Repository/ArrayRepositoryTest.php @@ -17,11 +17,37 @@ use Composer\Package\MemoryPackage; class ArrayRepositoryTest extends \PHPUnit_Framework_TestCase { - public function testAddLiteral() + public function testAddPackage() { $repo = new ArrayRepository; $repo->addPackage(new MemoryPackage('foo', '1')); $this->assertEquals(1, count($repo)); } + + public function testRemovePackage() + { + $package = new MemoryPackage('bar', '2'); + + $repo = new ArrayRepository; + $repo->addPackage(new MemoryPackage('foo', '1')); + $repo->addPackage($package); + + $this->assertEquals(2, count($repo)); + + $repo->removePackage(new MemoryPackage('foo', '1')); + + $this->assertEquals(1, count($repo)); + $this->assertEquals(array($package), $repo->getPackages()); + } + + public function testHasPackage() + { + $repo = new ArrayRepository; + $repo->addPackage(new MemoryPackage('foo', '1')); + $repo->addPackage(new MemoryPackage('bar', '2')); + + $this->assertTrue($repo->hasPackage(new MemoryPackage('foo', '1'))); + $this->assertFalse($repo->hasPackage(new MemoryPackage('bar', '1'))); + } }