Browse Source

Added hasPackage and removePackage methods to the ArrayRepository

everzet 13 years ago
parent
commit
28d9df7da6

+ 38 - 0
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
      *

+ 27 - 1
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')));
+    }
 }