/**
  * Resolves an alias into a Version.
  *
  * IMPROVE: this method has an NPath complexity of 400. The configured NPath complexity threshold is 200.
  *
  * @SuppressWarnings(PHPMD.NPathComplexity)
  *
  * @param string $alias
  * @param Collection $collection
  *
  * @return \Baleen\Migrations\Version\VersionInterface|null|string
  */
 protected function doResolve($alias, Collection $collection)
 {
     if (!$collection instanceof Sortable) {
         return null;
     }
     // parse alias
     $matches = [];
     if (!preg_match(self::PATTERN, $alias, $matches)) {
         return null;
     }
     list(, $newAlias, $operator) = $matches;
     // resolve the new alias (this will allow to resolve e.g. HEAD-1)
     $absoluteVersion = $collection->get($newAlias);
     if (null === $absoluteVersion) {
         return null;
     }
     // calculate the offset
     $count = !isset($matches[3]) ? strlen($operator) : (int) $matches[3];
     if (strlen($operator) > 1) {
         $operator = substr($operator, 0, 1);
     }
     $multiplier = $operator === '+' ? 1 : -1;
     $offset = $count * $multiplier;
     // find version by absolute position + offset
     $absolutePos = $collection->indexOf($absoluteVersion);
     return $collection->get($absolutePos + $offset);
 }
 /**
  * doResolve
  *
  * @param $alias
  * @param Collection $collection
  *
  * @return VersionInterface|null
  */
 protected function doResolve($alias, Collection $collection)
 {
     if (!$collection instanceof Sortable || strtolower($alias) !== self::HEAD) {
         return null;
     }
     $reversed = $collection->getReverse();
     foreach ($reversed as $version) {
         /** @var VersionInterface $version */
         if ($version->isMigrated()) {
             return $version;
         }
     }
     return null;
 }
Exemple #3
0
 /**
  * @param VersionInterface[]|\Traversable $versions
  * @param ResolverInterface $resolver
  * @param ComparatorInterface $comparator
  *
  * @throws \Baleen\Migrations\Exception\InvalidArgumentException
  */
 public function __construct($versions = [], ResolverInterface $resolver = null, ComparatorInterface $comparator = null)
 {
     if (null === $comparator) {
         $comparator = new MigrationComparator();
     }
     $this->comparator = $comparator;
     parent::__construct($versions, $resolver);
 }
 /**
  * Resolves an alias into a Version.
  *
  * @param string $alias
  *
  * @param Collection $collection
  * @return VersionInterface|null
  */
 protected function doResolve($alias, Collection $collection)
 {
     if (!$collection instanceof Sortable) {
         return null;
     }
     $result = null;
     switch (strtolower($alias)) {
         case self::LAST:
         case self::LATEST:
             $result = $collection->last();
             break;
         case self::FIRST:
         case self::EARLIEST:
             $result = $collection->first();
             break;
         default:
     }
     return $result;
 }
Exemple #5
0
 /**
  * @inheritdoc
  */
 public function doResolve($alias, Collection $collection)
 {
     return $collection->getById($alias);
 }