|  | @@ -2,49 +2,93 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  namespace Fgm\ComposerCheck;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Class MergeBox merges requirements with locked versions and platform.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  |  class MergeBox {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * The composer.lock loader.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @var \Fgm\ComposerCheck\LockLoader
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  protected $lock;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * The merged packages.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @var array
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  |    protected $packages;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  public function __construct(RequirementsLoader $requirementsLoader, LockLoader $lockLoader) {
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * The composer.json loader.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @var \Fgm\ComposerCheck\RequirementsLoader
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  protected $requirements;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * MergeBox constructor.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  | +   * @param \Fgm\ComposerCheck\RequirementsLoader $requirementsLoader
 | 
	
		
			
				|  |  | +   *   The composer.json loader.
 | 
	
		
			
				|  |  | +   * @param \Fgm\ComposerCheck\LockLoader $lockLoader
 | 
	
		
			
				|  |  | +   *   The composer.lock loader.
 | 
	
		
			
				|  |  | +   * @param bool $all
 | 
	
		
			
				|  |  | +   *   Include all packages or only those required ?
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  public function __construct(RequirementsLoader $requirementsLoader, LockLoader $lockLoader, bool $all) {
 | 
	
		
			
				|  |  | +    $this->requirements = $requirementsLoader;
 | 
	
		
			
				|  |  | +    $this->lock = $lockLoader;
 | 
	
		
			
				|  |  | +    $this->all = $all;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * Perform reconciliation of requirements and locked packages/platform.
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  |    public function merge() {
 | 
	
		
			
				|  |  |      $packages = ['dev' => [], 'run' => []];
 | 
	
		
			
				|  |  | -    foreach ($jsonPackages as $package => $requirement) {
 | 
	
		
			
				|  |  | -      if ($all || !empty($requirement)) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    foreach ($this->requirements->getRun() as $package => $requirement) {
 | 
	
		
			
				|  |  | +      if ($this->all || !empty($requirement)) {
 | 
	
		
			
				|  |  |          $package = strtolower($package);
 | 
	
		
			
				|  |  |          $packages['run'][$package]['requirement'] = $requirement;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    foreach ($jsonDevPackages as $package => $requirement) {
 | 
	
		
			
				|  |  | -      if ($all || !empty($requirement)) {
 | 
	
		
			
				|  |  | +    foreach ($this->requirements->getDev() as $package => $requirement) {
 | 
	
		
			
				|  |  | +      if ($this->all || !empty($requirement)) {
 | 
	
		
			
				|  |  |          $package = strtolower($package);
 | 
	
		
			
				|  |  |          $packages['dev'][$package]['requirement'] = $requirement;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    foreach ($lockPackages as $packageInfo) {
 | 
	
		
			
				|  |  | +    foreach ($this->lock->getRun() as $packageInfo) {
 | 
	
		
			
				|  |  |        $package = strtolower($packageInfo['name']);
 | 
	
		
			
				|  |  | -      if ($all || !empty($packages['run'][$package])) {
 | 
	
		
			
				|  |  | +      if ($this->all || !empty($packages['run'][$package])) {
 | 
	
		
			
				|  |  |          $version = $packageInfo['version'];
 | 
	
		
			
				|  |  |          $packages['run'][$package]['version'] = $version;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    foreach ($lockDevPackages as $packageInfo) {
 | 
	
		
			
				|  |  | +    foreach ($this->lock->getDev() as $packageInfo) {
 | 
	
		
			
				|  |  |        $package = strtolower($packageInfo['name']);
 | 
	
		
			
				|  |  | -      if ($all || !empty($packages['dev'][$package])) {
 | 
	
		
			
				|  |  | +      if ($this->all || !empty($packages['dev'][$package])) {
 | 
	
		
			
				|  |  |          $version = $packageInfo['version'];
 | 
	
		
			
				|  |  |          $packages['dev'][$package]['version'] = $version;
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      ksort($packages['dev']);
 | 
	
		
			
				|  |  |      ksort($packages['run']);
 | 
	
		
			
				|  |  | +    $this->packages = $packages;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    /**
 | 
	
		
			
				|  |  | +   * Return the merge results.
 | 
	
		
			
				|  |  | +   *
 | 
	
		
			
				|  |  |     * @return array
 | 
	
		
			
				|  |  | +   *   An array of requirements and matching locked versions.
 | 
	
		
			
				|  |  |     */
 | 
	
		
			
				|  |  |    public function getRows() {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    return $this->packages;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  }
 |