ExpressiveInstaller\OptionalPackages::addPackage PHP Method

addPackage() public static method

Add a package
public static addPackage ( Composer\IO\IOInterface $io, string $packageName, string $packageVersion )
$io Composer\IO\IOInterface
$packageName string
$packageVersion string
    public static function addPackage(IOInterface $io, $packageName, $packageVersion)
    {
        $io->write(sprintf("  - Adding package <info>%s</info> (<comment>%s</comment>)", $packageName, $packageVersion));
        // Get the version constraint
        $versionParser = new VersionParser();
        $constraint = $versionParser->parseConstraints($packageVersion);
        // Create package link
        $link = new Link('__root__', $packageName, $constraint, 'requires', $packageVersion);
        // Add package to the root package and composer.json requirements
        if (in_array($packageName, self::$config['require-dev'])) {
            unset(self::$composerDefinition['require'][$packageName]);
            unset(self::$composerRequires[$packageName]);
            self::$composerDefinition['require-dev'][$packageName] = $packageVersion;
            self::$composerDevRequires[$packageName] = $link;
        } else {
            unset(self::$composerDefinition['require-dev'][$packageName]);
            unset(self::$composerDevRequires[$packageName]);
            self::$composerDefinition['require'][$packageName] = $packageVersion;
            self::$composerRequires[$packageName] = $link;
        }
        // Set package stability if needed
        switch (VersionParser::parseStability($packageVersion)) {
            case 'dev':
                self::$stabilityFlags[$packageName] = BasePackage::STABILITY_DEV;
                break;
            case 'alpha':
                self::$stabilityFlags[$packageName] = BasePackage::STABILITY_ALPHA;
                break;
            case 'beta':
                self::$stabilityFlags[$packageName] = BasePackage::STABILITY_BETA;
                break;
            case 'RC':
                self::$stabilityFlags[$packageName] = BasePackage::STABILITY_RC;
                break;
        }
    }

Usage Example

 /**
  * @dataProvider packageProvider
  */
 public function testAddPackage($packageName, $packageVersion, $expectedStability)
 {
     // Prepare the installer
     OptionalPackages::removeDevDependencies();
     $io = $this->prophesize('Composer\\IO\\IOInterface');
     $io->write(Argument::containingString('Adding package'))->shouldBeCalled();
     OptionalPackages::addPackage($io->reveal(), $packageName, $packageVersion);
     $this->assertComposerHasPackages(['zendframework/zend-stdlib']);
     $stabilityFlags = $this->getStabilityFlags();
     // Stability flags are only set for non-stable packages
     if ($expectedStability) {
         $this->assertArrayHasKey($packageName, $stabilityFlags);
         $this->assertEquals($expectedStability, $stabilityFlags[$packageName]);
     }
 }