Skip to content

Commit 445d269

Browse files
committed
Написана справка на 80%
1 parent c0e7be0 commit 445d269

File tree

2 files changed

+478
-1
lines changed

2 files changed

+478
-1
lines changed

README.md

Lines changed: 337 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,342 @@
66
[![Build Status](https://travis-ci.org/khorevaa/semver.svg?branch=master)](https://travis-ci.org/khorevaa/semver)
77
[![Coverage Status](https://coveralls.io/repos/github/khorevaa/semver/badge.svg?branch=master)](https://coveralls.io/github/khorevaa/semver?branch=master)
88

9+
# Библиотека для работы с версиями
910

11+
Библиотека позволяет читать из строк и сравнивать версии, а так же диапазоны версий семантического версионирования (semver) аннотация v2.0.0 (например, npmjs.org, pypi.org и другие)
1012

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

Comments
 (0)