20250625
* Добавлено перечисление VersionCompareRangeOption. * В классе VersionInfo добавлен метод CompareWithRange.
This commit is contained in:
parent
df660676d0
commit
1290a567de
56
composer.lock
generated
56
composer.lock
generated
@ -245,16 +245,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
"version": "12.3.0",
|
||||
"version": "12.3.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||
"reference": "9075a8efc66e11bc55c319062e147bdb06777267"
|
||||
"reference": "ddec29dfc128eba9c204389960f2063f3b7fa170"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/9075a8efc66e11bc55c319062e147bdb06777267",
|
||||
"reference": "9075a8efc66e11bc55c319062e147bdb06777267",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ddec29dfc128eba9c204389960f2063f3b7fa170",
|
||||
"reference": "ddec29dfc128eba9c204389960f2063f3b7fa170",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -310,7 +310,7 @@
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
||||
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.0"
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -330,7 +330,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-05-23T15:49:03+00:00"
|
||||
"time": "2025-06-18T08:58:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-file-iterator",
|
||||
@ -579,16 +579,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "12.2.1",
|
||||
"version": "12.2.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "5f09fda04e7caea93cff50b4e90319184f3e6ee3"
|
||||
"reference": "60a8ea2d8b2f070000051b56778009e11576e7d1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5f09fda04e7caea93cff50b4e90319184f3e6ee3",
|
||||
"reference": "5f09fda04e7caea93cff50b4e90319184f3e6ee3",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/60a8ea2d8b2f070000051b56778009e11576e7d1",
|
||||
"reference": "60a8ea2d8b2f070000051b56778009e11576e7d1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -602,13 +602,13 @@
|
||||
"phar-io/manifest": "^2.0.4",
|
||||
"phar-io/version": "^3.2.1",
|
||||
"php": ">=8.3",
|
||||
"phpunit/php-code-coverage": "^12.3.0",
|
||||
"phpunit/php-code-coverage": "^12.3.1",
|
||||
"phpunit/php-file-iterator": "^6.0.0",
|
||||
"phpunit/php-invoker": "^6.0.0",
|
||||
"phpunit/php-text-template": "^5.0.0",
|
||||
"phpunit/php-timer": "^8.0.0",
|
||||
"sebastian/cli-parser": "^4.0.0",
|
||||
"sebastian/comparator": "^7.0.1",
|
||||
"sebastian/comparator": "^7.1.0",
|
||||
"sebastian/diff": "^7.0.0",
|
||||
"sebastian/environment": "^8.0.2",
|
||||
"sebastian/exporter": "^7.0.0",
|
||||
@ -656,7 +656,7 @@
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.2.1"
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.2.3"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -680,7 +680,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-06-07T05:17:47+00:00"
|
||||
"time": "2025-06-20T11:33:06+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/cli-parser",
|
||||
@ -741,16 +741,16 @@
|
||||
},
|
||||
{
|
||||
"name": "sebastian/comparator",
|
||||
"version": "7.0.1",
|
||||
"version": "7.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/comparator.git",
|
||||
"reference": "b478f34614f934e0291598d0c08cbaba9644bee5"
|
||||
"reference": "03d905327dccc0851c9a08d6a979dfc683826b6f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b478f34614f934e0291598d0c08cbaba9644bee5",
|
||||
"reference": "b478f34614f934e0291598d0c08cbaba9644bee5",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/03d905327dccc0851c9a08d6a979dfc683826b6f",
|
||||
"reference": "03d905327dccc0851c9a08d6a979dfc683826b6f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -761,7 +761,7 @@
|
||||
"sebastian/exporter": "^7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^12.0"
|
||||
"phpunit/phpunit": "^12.2"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-bcmath": "For comparing BcMath\\Number objects"
|
||||
@ -769,7 +769,7 @@
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "7.0-dev"
|
||||
"dev-main": "7.1-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -809,15 +809,27 @@
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/comparator/issues",
|
||||
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/comparator/tree/7.0.1"
|
||||
"source": "https://github.com/sebastianbergmann/comparator/tree/7.1.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/sebastianbergmann",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://liberapay.com/sebastianbergmann",
|
||||
"type": "liberapay"
|
||||
},
|
||||
{
|
||||
"url": "https://thanks.dev/u/gh/sebastianbergmann",
|
||||
"type": "thanks_dev"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-03-07T07:00:32+00:00"
|
||||
"time": "2025-06-17T07:41:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/complexity",
|
||||
|
@ -2,9 +2,10 @@
|
||||
|
||||
## Информация о версии
|
||||
|
||||
Версия класса: 1.0
|
||||
Версия класса: 1.1
|
||||
|
||||
Впервые введено в пакет с версии: 1.0.24
|
||||
Последнее обновление в версии: 1.0.27
|
||||
|
||||
Описание класса: Класс, описывающий информацию о версии.
|
||||
|
||||
@ -206,6 +207,106 @@
|
||||
|
||||
-1|0|1
|
||||
|
||||
#### Метод `CompareWithRange`
|
||||
|
||||
Введено в версии `1.0.27`.
|
||||
|
||||
Это метод, который проверяет, находится ли текущая версия в заданном диапазоне, указанном в **2 необязательных
|
||||
параметрах**:
|
||||
|
||||
* `VersionInfo (или null) $left` - левая граница, по умолчанию, `null`;
|
||||
* `VersionInfo (или null) $right` - правая граница, по умолчанию, `null`.
|
||||
|
||||
В случае, если будет передан `null` вместо левой границы, то метод создаст класс `VersionInfo` с минимально возможной
|
||||
версией `0.0.0.0 PreAlpha 0`, а вместо правой - `VersionInfo` с максимально возможной версией
|
||||
`9223372036854775807.9223372036854775807.9223372036854775807.9223372036854775807 Stable` (здесь `9223372036854775807` -
|
||||
максимальное число INT по умолчанию - у вас может быть другое).
|
||||
|
||||
Границы могут совпадать, тогда поведение будет совпадать с методом `CompareWith` (при условии, что границы включены).
|
||||
Кроме того, работает защита "от дурака" и если границы перепутаны, то метод автоматически поменяет их местами.
|
||||
|
||||
**3-й необязательный параметр** отвечает за параметры сравнения. Это `ObjectArray` из перечисления
|
||||
`VersionCompareRangeOption`, который может содержать следующие настройки:
|
||||
|
||||
| Настройка | Описание | Включена по умолчанию |
|
||||
|:-------------------:|:-------------------------------------:|:---------------------:|
|
||||
| LeftBorderIncluded | Включена ли левая граница в диапазон | ДА |
|
||||
| RightBorderIncluded | Включена ли правая граница в диапазон | ДА |
|
||||
|
||||
Этот метод возвращает `int`:
|
||||
|
||||
| Текущая версия | Результат |
|
||||
|:---------------------------------:|:---------:|
|
||||
| Младше диапазона | -1 |
|
||||
| Внутри диапазона (или на границе) | 0 |
|
||||
| Старше диапазона | 1 |
|
||||
|
||||
Синтаксис:
|
||||
|
||||
public function CompareWithRange (?VersionInfo $left = null, ?VersionInfo $right = null, ?ObjectArray $options = null): int
|
||||
|
||||
Пример,
|
||||
|
||||
// Создаю объекты
|
||||
// - 1.2.3.4 Beta 1
|
||||
$versionInfo1 = new VersionInfo(1, 2, 3, 4, VersionInfoStage::Beta, 1);
|
||||
|
||||
// - 1.1.3.4 Alpha 2
|
||||
$versionInfo2 = new VersionInfo(1, 1, 3, 4, VersionInfoStage::Alpha, 2);
|
||||
|
||||
// - 1.1.1.1 Alpha 2
|
||||
$versionInfo3 = new VersionInfo(1, 1, 1, 1, VersionInfoStage::Alpha, 2);
|
||||
|
||||
// - 5.5.5.5 Stable
|
||||
$versionInfo4 = new VersionInfo(5, 5, 5, 5, VersionInfoStage::Stable);
|
||||
|
||||
// Сравниваю
|
||||
echo "Для начала простое сравнение: ";
|
||||
$ver1d1 = $versionInfo1->CompareWithRange($versionInfo3, $versionInfo4);
|
||||
$ver1d2 = $versionInfo2->CompareWithRange($versionInfo1, $versionInfo4);
|
||||
$ver1d2 = $versionInfo4->CompareWithRange($versionInfo2, $versionInfo1);
|
||||
echo "$ver1d1|$ver1d2|$ver1d3 \r\n"
|
||||
|
||||
echo "Немного перепутаем границы =) ";
|
||||
$ver2d1 = $versionInfo4->CompareWithRange($versionInfo1, $versionInfo2);
|
||||
echo "И получим: $ver2d1\r\n";
|
||||
|
||||
echo "А теперь с границами!\r\n";
|
||||
echo "- значение равно левой границе: ";
|
||||
$ver3d1 = $versionInfo2->CompareWithRange($versionInfo2, $versionInfo1);
|
||||
echo " $ver3d1\r\n";
|
||||
echo "- значение равно правой границе: ";
|
||||
$ver3d2 = $versionInfo1->CompareWithRange($versionInfo2, $versionInfo1);
|
||||
echo " $ver3d2\r\n";
|
||||
echo "- а теперь с выключением границ:\r\n";
|
||||
echo "-- для левой: ";
|
||||
$ver3d3 = $versionInfo2->CompareWithRange($versionInfo2, $versionInfo1, $optionNotBorder);
|
||||
echo " $ver3d3\r\n";
|
||||
echo "-- для правой: ";
|
||||
$ver3d4 = $versionInfo1->CompareWithRange($versionInfo2, $versionInfo1, $optionNotBorder);
|
||||
echo " $ver3d4\r\n";
|
||||
echo "А что если границы равны и значение равно?\r\n";
|
||||
echo "- для включённых границ: ";
|
||||
$ver4d1 = $versionInfo1->CompareWithRange($versionInfo1, $versionInfo1);
|
||||
echo " $ver4d1\r\n";
|
||||
echo "- для выключённых границ: ";
|
||||
$ver4d2 = $versionInfo1->CompareWithRange($versionInfo1, $versionInfo1, $optionNotBorder);
|
||||
echo " $ver4d2";
|
||||
|
||||
В результате на экране появится:
|
||||
|
||||
Для начала простое сравнение: 0|-1|1
|
||||
Немного перепутаем границы =) И получим: 1
|
||||
А теперь с границами!
|
||||
- значение равно левой границе: 0
|
||||
- значение равно правой границе: 0
|
||||
- а теперь с выключением границ:
|
||||
-- для левой: -1
|
||||
-- для правой: 1
|
||||
А что если границы равны и значение равно?
|
||||
- для включённых границ: 0
|
||||
- для выключённых границ: -1
|
||||
|
||||
### Парсинг версий
|
||||
|
||||
Для преобразования строки с версией в объект `VersionInfo` используется статичный метод `Parse`.
|
||||
|
@ -11,7 +11,7 @@ use goodboyalex\php_components_pack\extensions\StringExtension;
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_components_pack
|
||||
* @version 1.0
|
||||
* @version 1.1
|
||||
* @since 1.0.24
|
||||
*/
|
||||
final class VersionInfo
|
||||
@ -329,6 +329,11 @@ final class VersionInfo
|
||||
// Устанавливаем правую границу
|
||||
$rightBorder = $right ?? $maxVersion;
|
||||
|
||||
// Проверяем, что границы не перепутаны
|
||||
if ($leftBorder->CompareWith($rightBorder) == 0)
|
||||
// - если границы перепутаны, то меняем их местами
|
||||
[$leftBorder, $rightBorder] = [$rightBorder, $leftBorder];
|
||||
|
||||
// Проверяем текущую версию относительно границ
|
||||
$compareLeft = $this->CompareWith($leftBorder);
|
||||
$compareRight = $this->CompareWith($rightBorder);
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace goodboyalex\php_components_pack\tests\classes;
|
||||
|
||||
use goodboyalex\php_components_pack\classes\ObjectArray;
|
||||
use goodboyalex\php_components_pack\classes\VersionInfo;
|
||||
use goodboyalex\php_components_pack\enums\VersionInfoStage;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
@ -103,9 +104,31 @@ class VersionInfoTest extends TestCase
|
||||
|
||||
$versionInfo4 = new VersionInfo(5, 5, 5, 5, VersionInfoStage::Stable);
|
||||
|
||||
$optionNotBorder = new ObjectArray();
|
||||
|
||||
// Для начала простое сравнение
|
||||
$this->assertEquals(0, $versionInfo1->CompareWithRange($versionInfo3, $versionInfo4));
|
||||
$this->assertEquals(-1, $versionInfo2->CompareWithRange($versionInfo1, $versionInfo4));
|
||||
$this->assertEquals(1, $versionInfo4->CompareWithRange($versionInfo2, $versionInfo1));
|
||||
|
||||
// Немного перепутаем границы =)
|
||||
$this->assertEquals(1, $versionInfo4->CompareWithRange($versionInfo1, $versionInfo2));
|
||||
|
||||
// А теперь с границами
|
||||
// - значение равно левой границе
|
||||
$this->assertEquals(0, $versionInfo2->CompareWithRange($versionInfo2, $versionInfo1));
|
||||
// - значение равно правой границе
|
||||
$this->assertEquals(0, $versionInfo1->CompareWithRange($versionInfo2, $versionInfo1));
|
||||
// - а теперь с выключением границ
|
||||
// -- для левой
|
||||
$this->assertEquals(-1, $versionInfo2->CompareWithRange($versionInfo2, $versionInfo1, $optionNotBorder));
|
||||
// -- для правой
|
||||
$this->assertEquals(1, $versionInfo1->CompareWithRange($versionInfo2, $versionInfo1, $optionNotBorder));
|
||||
|
||||
// А что если границы равны и значение равно
|
||||
// - для включённых границ
|
||||
$this->assertEquals(0, $versionInfo1->CompareWithRange($versionInfo1, $versionInfo1));
|
||||
// - для выключённых границ
|
||||
$this->assertEquals(-1, $versionInfo1->CompareWithRange($versionInfo1, $versionInfo1, $optionNotBorder));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user