|
6 | 6 | [](https://travis-ci.org/khorevaa/semver) |
7 | 7 | [](https://coveralls.io/github/khorevaa/semver?branch=master) |
8 | 8 |
|
| 9 | +# Библиотека для работы с версиями |
9 | 10 |
|
| 11 | +Библиотека позволяет читать из строк и сравнивать версии, а так же диапазоны версий семантического версионирования (semver) аннотация v2.0.0 (например, npmjs.org, pypi.org и другие) |
10 | 12 |
|
11 | | -Библиотека для работы с версиями |
| 13 | +Данная библиотека не использует регулярные выражения. |
| 14 | + |
| 15 | + |
| 16 | +Пример работы: |
| 17 | + |
| 18 | +* Чтение версии из файла |
| 19 | +```bsl |
| 20 | +
|
| 21 | +Версия = Версии.ВерсияИзФайла("Путь/К/Файлу"); |
| 22 | +
|
| 23 | +Сообщить(Версия.ВСтроку()); |
| 24 | +
|
| 25 | +``` |
| 26 | + |
| 27 | +* Версия из строки |
| 28 | +```bsl |
| 29 | +
|
| 30 | +Версия = Версии.ВерсияИзСтроки("1.0.0"); |
| 31 | +
|
| 32 | +Сообщить(Версия.ВСтроку()); |
| 33 | +
|
| 34 | +``` |
| 35 | +* Максимальная версия из массива версий |
| 36 | +```bsl |
| 37 | +
|
| 38 | +МассивВерсий = Новый Массив(); |
| 39 | +МассивВерсий.Добавить(ВерсияИзСтроки("1.0.2")); |
| 40 | +МассивВерсий.Добавить(ВерсияИзСтроки("1.0.3")); |
| 41 | +МассивВерсий.Добавить(ВерсияИзСтроки("1.0.4")); |
| 42 | +
|
| 43 | +МаксимальнаяВерсия = Версии.МаксимальнаяИзМассива(МассивВерсий); |
| 44 | +
|
| 45 | +Сообщить(МаксимальнаяВерсия.ВСтроку()); |
| 46 | +
|
| 47 | +``` |
| 48 | + |
| 49 | + |
| 50 | +* Сравнение версий |
| 51 | +```bsl |
| 52 | +
|
| 53 | +ЗнакСравнения = Версии.СравнитьВерсии("1.0.0", "2.0"); |
| 54 | +// Пример, |
| 55 | +// (-1) - СтрокаВерсия1 меньше (<) СтрокаВерсия2 |
| 56 | +// (1) - СтрокаВерсия1 больше (>) СтрокаВерсия2 |
| 57 | +// (0) - СтрокаВерсия1 равна (=) СтрокаВерсия2 |
| 58 | +
|
| 59 | +Версия1Меньше = Версии.ВерсияМеньше("1.0.0", "2.0"); |
| 60 | +
|
| 61 | +Версия1Больше = Версии.ВерсияБольше("1.0.0", "2.0"); |
| 62 | +
|
| 63 | +``` |
| 64 | + |
| 65 | +* Соответсвие версии диапазону |
| 66 | +```bsl |
| 67 | +
|
| 68 | +Сравнение = Версии.Сравнение(">=1.0.0"); |
| 69 | +Результат = Сравнение.ПроверяемаяВерсия("1.0.2") |
| 70 | + .ВДиапазоне(); |
| 71 | +// ИЛИ |
| 72 | +
|
| 73 | +Результат = Версии.ВерсияВДиапазоне("1.0.2", ">=1.0.0") |
| 74 | +
|
| 75 | +``` |
| 76 | + |
| 77 | +* Соответсвие массива версий диапазону |
| 78 | +```bsl |
| 79 | +
|
| 80 | +МассивВерсий = Новый Массив(); |
| 81 | +МассивВерсий.Добавить("1.0.2"); |
| 82 | +МассивВерсий.Добавить("1.0.3"); |
| 83 | +МассивВерсий.Добавить("1.0.4"); |
| 84 | +
|
| 85 | +Сравнение = Версии.Сравнение(">=1.0.0"); |
| 86 | +Результат = Сравнение.ПроверяемыеВерсии(МассивВерсий) |
| 87 | + .ВДиапазоне(); |
| 88 | +
|
| 89 | +``` |
| 90 | + |
| 91 | +* Масимальная версия массива версий соотвествующая диапазону |
| 92 | +```bsl |
| 93 | +
|
| 94 | +МассивВерсий = Новый Массив(); |
| 95 | +МассивВерсий.Добавить("1.0.2"); |
| 96 | +МассивВерсий.Добавить("1.0.3"); |
| 97 | +МассивВерсий.Добавить("1.0.4"); |
| 98 | +
|
| 99 | +МаксимальнаяВерсия = Версии.Сравнение(">=1.0.0") |
| 100 | + .ПроверяемыеВерсии(МассивВерсий) |
| 101 | + .Максимальная(); |
| 102 | +
|
| 103 | +Сообщить(МаксимальнаяВерсия.ВСтроку()); |
| 104 | +
|
| 105 | +``` |
| 106 | + |
| 107 | +* Масимальная версия массива версий между диапазонами нижний и верхний |
| 108 | +```bsl |
| 109 | +
|
| 110 | +МассивВерсий = Новый Массив(); |
| 111 | +МассивВерсий.Добавить("1.0.2"); |
| 112 | +МассивВерсий.Добавить("1.0.3"); |
| 113 | +МассивВерсий.Добавить("1.0.4"); |
| 114 | +
|
| 115 | +МаксимальнаяВерсия = Версии.МаксимальнаяВерсияМежду(МассивВерсий, ">=1.0.0", "<2.0.0"); |
| 116 | +
|
| 117 | +// ИЛИ |
| 118 | +МаксимальнаяВерсия = Версии.Сравнение(">=1.0.0") |
| 119 | + .ДобавитьДиапазон("<2.0.0") |
| 120 | + .ПроверяемыеВерсии(МассивВерсий) |
| 121 | + .Максимальная(); |
| 122 | +
|
| 123 | +Сообщить(МаксимальнаяВерсия.ВСтроку()); |
| 124 | +
|
| 125 | +``` |
| 126 | + |
| 127 | +Так же описание функциональности содержится в папке `tests`. В прилагающихся `*.os` можно подсмотреть больше примеров из тестов. |
| 128 | + |
| 129 | +## Установка |
| 130 | + |
| 131 | +Для установки необходимо: |
| 132 | +* Скачать файл semver.ospx из раздела [releases](https://github.com/khorevaa/semver/releases) |
| 133 | +* Воспользоваться командой: |
| 134 | + |
| 135 | +``` |
| 136 | +opm install -f <ПутьКФайлу> |
| 137 | +``` |
| 138 | +или |
| 139 | + |
| 140 | +``` |
| 141 | +opm install semver |
| 142 | +``` |
| 143 | +## Базовые принципы работы с классами библиотеки |
| 144 | + |
| 145 | +### Работа с версией |
| 146 | + |
| 147 | +Для чтения версии из строки и оперирования версиями реализован класс `Версия`. |
| 148 | +> При чтении версии из строки, в случае возникновения ошибки всегда возвращается нулевая версия (`0.0.0`) |
| 149 | +
|
| 150 | +* Создание класса версия |
| 151 | +```bsl |
| 152 | +
|
| 153 | + НоваяВерсия = Новый Версия("1.0.0"); |
| 154 | +
|
| 155 | +``` |
| 156 | + |
| 157 | +* Строковое представление класса версия |
| 158 | +```bsl |
| 159 | +
|
| 160 | + НоваяВерсия = Новый Версия("1.0.0"); |
| 161 | + Сообщить(НоваяВерсия.ВСтроку()); |
| 162 | +``` |
| 163 | + |
| 164 | +* Сравнение версии с другими версиями |
| 165 | +```bsl |
| 166 | +
|
| 167 | + НоваяВерсия = Новый Версия("1.0.0"); |
| 168 | + ВтораяВерсия = Новый Версия("2.0.0"); |
| 169 | +
|
| 170 | + Больше = НоваяВерсия.Больше(ВтораяВерсия); |
| 171 | + БольшеИлиРавны = НоваяВерсия.БольшеИлиРавны(ВтораяВерсия); |
| 172 | + Меньше = НоваяВерсия.Меньше(ВтораяВерсия); |
| 173 | + МеньшеИлиРавны = НоваяВерсия.МеньшеИлиРавны(ВтораяВерсия); |
| 174 | +
|
| 175 | +``` |
| 176 | + |
| 177 | +* Получение ошибки при чтении версии из строки |
| 178 | +```bsl |
| 179 | +
|
| 180 | + НоваяВерсия = Новый Версия("1.0.0"); |
| 181 | + Если НоваяВерсия.Ошибка() Тогда |
| 182 | + Сообщить(НоваяВерсия.ПолучитьОписаниеОшибки()); |
| 183 | + КонецЕсли; |
| 184 | +
|
| 185 | +``` |
| 186 | + |
| 187 | +Более подробно смотри в описании [публичного интерфейса](docs/README.md#класс-версия) |
| 188 | + |
| 189 | +### Работа с версиями |
| 190 | + |
| 191 | +Для работы с несколькими версиями реализован модель `Версии` |
| 192 | + |
| 193 | +Более подробно смотри в описании [публичного интерфейса](docs/README.md#модуль-версии) |
| 194 | +### Работа с диапазоном версий |
| 195 | + |
| 196 | +Для работы с диапазонами версий реализован класс `ДиапазонВерсий`. |
| 197 | + |
| 198 | + |
| 199 | +Данный класс реализовывает вычисление вхождения версии (или массива версии) в переданный диапазон. А так же обеспечивает чтение простых диапазонов (`>=1.2`), с тильдой (`~`), с кареткой (`^`) и X - диапазоны (`x, X или *`) |
| 200 | + |
| 201 | + |
| 202 | +Более подробно смотри в описании [публичного интерфейса](docs/README.md#класс-диапазонверсий) |
| 203 | +### Работа с сравнением версий |
| 204 | + |
| 205 | +Для работы с сравнениями версий реализован класс СравнениеВерсий |
| 206 | + |
| 207 | +Класс реализовывает ряд терминальных методов: |
| 208 | + |
| 209 | +* `ВМассив()` - выполняет сравнение и выгружает результат (подходящие версии) в массив (элементы класса Версия) |
| 210 | +* `ВМассивСтрок()` - тоже самое, что и `ВМассив()`, только элементы массива равны строковым представлениям версий |
| 211 | +* `Максимальная()` - выполняет сравнение и возвращает максимальный из подходящих версий |
| 212 | +* `ВДиапазоне()` - выполняет сравнение и возвращает истина или ложь, если все проверяемые элементы подошли под диапазоны сравнения |
| 213 | + |
| 214 | +Все остальные методы возвращают этот же класс, что позволяет работать в `текучем` виде. |
| 215 | + |
| 216 | +Примеры использования: |
| 217 | + |
| 218 | +* Создание объекта сравнения версий |
| 219 | +```bsl |
| 220 | +
|
| 221 | +СравнениеВсеВерсии = Новый СравнениеВерсий(); // Диапазон по умолчанию "*" |
| 222 | +СравнениеБольшеРавно = Новый СравнениеВерсий(">=1.0.0"); |
| 223 | +
|
| 224 | +// Или через модуль Версии |
| 225 | +СравнениеВсеВерсии = Версии.Сравнение(); // Диапазон по умолчанию "*" |
| 226 | +СравнениеБольшеРавно = Версии.Сравнение(">=1.0.0"); |
| 227 | +
|
| 228 | +``` |
| 229 | + |
| 230 | +* Добавление еще одного диапазона в сравнение |
| 231 | +```bsl |
| 232 | +
|
| 233 | +Сравнение = Новый СравнениеВерсий(">=1.0.0"); |
| 234 | +Сравнение.ДобавитьДиапазон("<2.0.0"); |
| 235 | +
|
| 236 | +// Или через модуль Версии |
| 237 | +Сравнение = Версии.Сравнение(">=1.0.0") |
| 238 | + .ДобавитьДиапазон("<2.0.0"); |
| 239 | +
|
| 240 | +``` |
| 241 | + |
| 242 | +* Добавление версии для сравнения |
| 243 | +```bsl |
| 244 | +
|
| 245 | +Сравнение = Новый СравнениеВерсий(">=1.0.0"); |
| 246 | +Сравнение.ДобавитьДиапазон("<2.0.0"); |
| 247 | +Сравнение.ПроверяемаяВерсия("1.0.0"); |
| 248 | +
|
| 249 | +// Или через модуль Версии |
| 250 | +Сравнение = Версии.Сравнение(">=1.0.0") |
| 251 | + .ДобавитьДиапазон("<2.0.0") |
| 252 | + .ПроверяемаяВерсия("1.0.0"); |
| 253 | +
|
| 254 | +``` |
| 255 | + |
| 256 | +* Добавление массива версий для сравнения |
| 257 | +```bsl |
| 258 | +
|
| 259 | +МассивВерсий = Новый Массив(); |
| 260 | +МассивВерсий.Добавить("1.0.2"); |
| 261 | +МассивВерсий.Добавить("1.0.3"); |
| 262 | +МассивВерсий.Добавить("1.0.4"); |
| 263 | +
|
| 264 | +Сравнение = Новый СравнениеВерсий(">=1.0.0"); |
| 265 | +Сравнение.ДобавитьДиапазон("<2.0.0"); |
| 266 | +Сравнение.ПроверяемыеВерсии(МассивВерсий); |
| 267 | +
|
| 268 | +// Или через модуль Версии |
| 269 | +Сравнение = Версии.Сравнение(">=1.0.0") |
| 270 | + .ДобавитьДиапазон("<2.0.0") |
| 271 | + .ПроверяемыеВерсии(МассивВерсий); |
| 272 | +
|
| 273 | +``` |
| 274 | + |
| 275 | +Более подробно смотри в описании [публичного интерфейса](docs/README.md#класс-сравнениеверсий) |
| 276 | +## Диапазоны |
| 277 | + |
| 278 | +Поддерживаются, как простые диапазоны версий `>1.2.3`, `>=1.2`, `<1`. так и сложные с использованием символов тильда (`~`), каретка(`^`) и X (`x, X или *`) |
| 279 | + |
| 280 | +### Простые диапазоны (`>1.2.3`, `>=1.2`, `<1`) |
| 281 | + |
| 282 | +Они состоят из `знака операции` и строкового представления `версии`. Возможные знаки операции: |
| 283 | + |
| 284 | +* `<` Меньше |
| 285 | +* `<=` Меньше или равно |
| 286 | +* `>` Больше |
| 287 | +* `>=` Больше или рано |
| 288 | +* `=` Равно. (по умолчанию) используется, если знак операции не задан |
| 289 | + |
| 290 | +Примеры, |
| 291 | + |
| 292 | +* `>=1.2.3` |
| 293 | +* `<1.3.0` |
| 294 | + |
| 295 | +### Поддержка диапазонов тильда (`~1.2.3`, `~1.2`, `~1`) |
| 296 | + |
| 297 | +Примеры, диапазонов с тильдой. |
| 298 | + |
| 299 | +* `~1.2.3` = `>=1.2.3 <1.(2+1).0` = `>=1.2.3 <1.3.0` |
| 300 | +* `~1.2` = `>=1.2.0 <1.(2+1).0` = `>=1.2.0 <1.3.0` (Или `1.2.x`) |
| 301 | +* `~1` = `>=1.0.0 <(1+1).0.0` = `>=1.0.0 <2.0.0` (Или `1.x`) |
| 302 | +* `~0.2.3` = `>=0.2.3 <0.(2+1).0` = `>=0.2.3 <0.3.0` |
| 303 | +* `~0.2` = `>=0.2.0 <0.(2+1).0` = `>=0.2.0 <0.3.0` (Или `0.2.x`) |
| 304 | +* `~0` = `>=0.0.0 <(0+1).0.0` = `>=0.0.0 <1.0.0` (Или `0.x`) |
| 305 | + |
| 306 | +### Поддержка диапазонов каретка (`^1.2.3`, `^0.2.5`, `^0.0.4`) |
| 307 | + |
| 308 | +Диапазон каретки используется, если совместимость API не сохраняется между версиями`0.2.4` и `0.3.0` |
| 309 | + |
| 310 | +Примеры: |
| 311 | + |
| 312 | +* `^1.2.3` = `>=1.2.3 <2.0.0` |
| 313 | +* `^0.2.3` = `>=0.2.3 <0.3.0` |
| 314 | +* `^0.0.3` = `>=0.0.3 <0.0.4` |
| 315 | + |
| 316 | +Совместно с X: |
| 317 | + |
| 318 | +* `^1.2.x` = `>=1.2.0 <2.0.0` |
| 319 | +* `^0.0.x` = `>=0.0.0 <0.1.0` |
| 320 | +* `^0.0` = `>=0.0.0 <0.1.0` |
| 321 | +* `^1.x` = `>=1.0.0 <2.0.0` |
| 322 | +* `^0.x` = `>=0.0.0 <1.0.0` |
| 323 | + |
| 324 | +### Поддержка диапазонов X `1.2.x`, `1.X`, `1.2.*`, `*` |
| 325 | + |
| 326 | +Любой из символов `X`, `x`, или `*` может быть использовать в диапазоне на месте номера `[основной, вспомогательной, патча]`, например: |
| 327 | + |
| 328 | +* `*` = `>=0.0.0` (Любая версия) |
| 329 | +* `1.x` = `>=1.0.0 <2.0.0` (Между основными версиями) |
| 330 | +* `1.2.x` = `>=1.2.0 <1.3.0` (Mежду вспомогательными версиями) |
| 331 | + |
| 332 | +Или без них совсем. |
| 333 | + |
| 334 | +* `""` (Пустая строка) = `*` = `>=0.0.0` |
| 335 | +* `1` = `1.x.x` = `>=1.0.0 <2.0.0` |
| 336 | +* `1.2` = `1.2.x` = `>=1.2.0 <1.3.0` |
| 337 | + |
| 338 | +## Публичный интерфейс |
| 339 | + |
| 340 | +[Документация публичного интерфейса](docs/README.md) |
| 341 | +## Доработка |
| 342 | + |
| 343 | +Доработка проводится по git-flow. Жду ваших PR. |
| 344 | + |
| 345 | +## Лицензия |
| 346 | + |
| 347 | +Смотри файл `LICENSE`. |
0 commit comments