/** * 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; }
/** * @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; }
/** * @inheritdoc */ public function doResolve($alias, Collection $collection) { return $collection->getById($alias); }