Skip to content

Commit ed2b184

Browse files
committed
Merge branch 'release/v0.4.0'
2 parents 4c7d20b + edaad09 commit ed2b184

11 files changed

+524
-50
lines changed

.travis.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
1+
language: none
2+
13
sudo: required
24

35
dist: trusty
46

7+
git:
8+
depth: false
9+
510
addons:
611
sonarqube: true
712

813
jdk:
9-
- oraclejdk8
14+
- openjdk11
1015

1116
before_install:
1217
- sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
1318
- echo "deb http://download.mono-project.com/repo/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/mono-official.list
1419
- sudo apt-get update
1520
- sudo apt-get install mono-complete mono-devel
16-
- wget -O os.deb http://oscript.io/downloads/night-build/deb
21+
- wget -O os.deb http://oscript.io/downloads/1_0_21/deb
1722
- sudo dpkg -i os.deb; sudo apt install -f
1823
- sudo opm install 1commands
1924
- sudo opm install 1testrunner

CHANGELOG.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
## 0.4.0
2+
3+
* Добавлен конвейерный метод Развернуть/flatMap
4+
* Добавлено создание процессора коллекций из набора параметров (varargs...)
5+
6+
## 0.3.1
7+
8+
* Реальный переезд на использование API `Новый ОписаниеОповещения()`
9+
10+
## 0.3.0
11+
12+
* Обновление `notify` до версии `0.2.0`
13+
* Отказ от создания временных файлов в пользу создания описания оповещения через `ЗагрузитьСценарийИзСтроки`
14+
* Переезд на движок версии `1.0.18`
15+
116
## 0.2.2
217

318
* Исправлена ошибка неудаления временных файлов при вызове некоторых терминальных методов

README.md

Lines changed: 110 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# fluent
2+
23
[![Build Status](https://travis-ci.org/nixel2007/oscript-fluent.svg?branch=develop)](https://travis-ci.org/nixel2007/oscript-fluent)
3-
[![Quality Gate](https://sonar.silverbulleters.org/api/badges/gate?key=oscript-fluent)](https://sonar.silverbulleters.org/dashboard/index/oscript-fluent)
4-
[![Coverage](https://sonar.silverbulleters.org/api/badges/measure?key=oscript-fluent&metric=coverage)](https://sonar.silverbulleters.org/dashboard/index/oscript-fluent)
5-
[![Tech debt](https://sonar.silverbulleters.org/api/badges/measure?key=oscript-fluent&metric=sqale_debt_ratio)](https://sonar.silverbulleters.org/dashboard/index/oscript-fluent)
4+
[![Quality Gate](https://sonar.oscript.ru/api/project_badges/measure?project=oscript-fluent&metric=alert_status)](https://sonar.oscript.ru/dashboard?id=oscript-fluent)
5+
[![Maintainability](https://sonar.oscript.ru/api/project_badges/measure?project=oscript-fluent&metric=sqale_rating)](https://sonar.oscript.ru/dashboard?id=oscript-fluent)
6+
[![Coverage](https://sonar.oscript.ru/api/project_badges/measure?project=oscript-fluent&metric=coverage)](https://sonar.oscript.ru/dashboard?id=oscript-fluent)
67

78
Библиотека быстрой обработки коллекций.
89

@@ -14,14 +15,18 @@
1415
> Структуры и соответствия incoming
1516
1617
Конвейерные методы:
18+
1719
* Первые
1820
* Пропустить
1921
* Различные
2022
* Обработать
23+
* Развернуть
2124
* Фильтровать
2225
* Сортировать
26+
* СортироватьПо
2327

2428
Терминальные методы:
29+
2530
* ПолучитьПервый
2631
* ВМассив
2732
* ВСтроку
@@ -36,12 +41,15 @@
3641
* ВсеНеСоответствуют
3742

3843
Функции сравнения, фильтрации, обработки могут задаваться с помощью:
44+
3945
* Строк
4046
* Описаний оповещения (библиотека [notify](https://github.com/oscript-library/notify))
4147

4248
Библиотека помимо конструктора класса `ПроцессорКоллекций` содержит вспомогательный модуль, включающий:
49+
4350
* построитель процессора коллекций `ИзКоллекции()`
4451
* построитель процессора коллекций `ИзСтроки()`
52+
* построитель процессора коллекций `ИзНабора()`
4553
* `СтандартнаяФункцияСравнения()` - типовой `comparator`, возвращающий результат сравнения как `1`, `0`, `-1`
4654
* `СтандартнаяФункцияОбработки_Сообщить()` - функция сообщения каждого элемента в консоль
4755

@@ -253,6 +261,46 @@
253261
Функция Обработать(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) Экспорт
254262
```
255263

264+
#### Развернуть
265+
266+
```bsl
267+
// Развернуть каждый элемент коллекции в процессор коллекций.
268+
// Позволяет расширить имеющуюся коллекцию.
269+
// Например, разворачивание массива массивов сделает новый массив, содерщщий все элементы всех массивов.
270+
// Конвейерный метод.
271+
//
272+
// Параметры:
273+
// ФункцияРазворачивания - Строка, ОписаниеОповещения - функция разворачивания.
274+
// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные
275+
// "Результат", "ДополнительныеПараметры", "Элемент".
276+
// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра
277+
// (имена произвольные):
278+
// Результат - ПроцессорКоллекций - Переменная, в которую должен быть
279+
// помещен результат работы функции в виде ПроцессораКоллекций.
280+
// ДополнительныеПараметры - Структура - Структура параметров, передаваемая функции разворачивания.
281+
//
282+
// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции разворачивания.
283+
// Служит для передачи дополнительных данных из прикладного кода в функцию разворачивания.
284+
// По умолчанию содержит одно значение - Элемент.
285+
//
286+
// Возвращаемое значение:
287+
// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
288+
//
289+
// Примеры:
290+
// 1:
291+
// ПроцессорКоллекций.Развернуть("Результат = ПроцессорыКоллекций.ИзСтроки(Элемент);");
292+
//
293+
// 2:
294+
// Процедура МояФункцияРазворачивания(Результат, ДополнительныеПараметры) Экспорт
295+
// Результат = ПроцессорыКоллекций.ИзСтроки(ДополнительныеПараметры.Элемент);
296+
// КонецПроцедуры
297+
//
298+
// ФункцияРазворачивания = Новый ОписаниеОповещения("МояФункцияРазворачивания", ЭтотОбъект);
299+
// ПроцессорКоллекций.Развернуть(ФункцияРазворачивания);
300+
//
301+
Функция Развернуть(Знач ФункцияРазворачивания, Знач ДополнительныеПараметры = Неопределено) Экспорт
302+
```
303+
256304
#### Фильтровать
257305

258306
```bsl
@@ -329,6 +377,47 @@
329377
Функция Сортировать(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
330378
```
331379

380+
#### СортироватьПо
381+
382+
```bsl
383+
// Сортировать элементы коллекции по выбранному полю.
384+
// Конвейерный метод.
385+
//
386+
// Параметры:
387+
// ИмяПоля - Строка - Имя поля элемента коллекции, по которому необходимо осуществлять сортировку.
388+
//
389+
// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения.
390+
// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные
391+
// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2".
392+
// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра
393+
// (имена произвольные):
394+
// "Результат" - Булево - Переменная, в которой возвращается значение работы функции.
395+
// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции.
396+
// Если параметр не передан, выполняется стандартная функция сравнения:
397+
// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения()
398+
//
399+
// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения.
400+
// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения.
401+
// По умолчанию содержит два значения - Элемент1 и Элемент2.
402+
//
403+
// Возвращаемое значение:
404+
// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
405+
//
406+
// Примеры:
407+
// 1:
408+
// ПроцессорКоллекций.СортироватьПо("НомерСтроки", "Результат = Элемент1 > Элемент2");
409+
//
410+
// 2:
411+
// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт
412+
// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2;
413+
// КонецПроцедуры
414+
//
415+
// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект);
416+
// ПроцессорКоллекций.СортироватьПо("НомерСтроки", ФункцияСравнения);
417+
//
418+
Функция СортироватьПо(Знач ИмяПоля, Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
419+
```
420+
332421
> Терминальные методы
333422
334423
#### ПолучитьПервый
@@ -680,6 +769,24 @@
680769
Функция ИзСтроки(Строка, РазделительСтрок = Неопределено, ВключатьПустые = Истина) Экспорт
681770
```
682771

772+
#### ИзНабора
773+
774+
```bsl
775+
// Создать ПроцессорКоллекций на основании переданного набора значений.
776+
// Добавляет элемент в ПроцессорКоллекций, если он не равен NULL.
777+
//
778+
// Параметры:
779+
// Элемент1 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
780+
// Элемент2 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
781+
// Элемент3 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
782+
// ... Всего 32 параметра ...
783+
//
784+
// Возвращаемое значение:
785+
// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданным набором.
786+
//
787+
Функция ИзНабора(Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, ...) Экспорт
788+
```
789+
683790
#### СтандартнаяФункцияСравнения
684791

685792
```bsl

packagedef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
Описание.Имя("fluent")
3-
.Версия("0.3.1")
3+
.Версия("0.4.0")
44
.Описание("Библиотека для работы с коллекциями в ""текучем"" стиле")
55
.Автор("Nikita Gryzlov")
66
.АдресАвтора("nixel2007@gmail.com")

src/internal/Классы/ПроцессорКоллекцийСлужебный.os

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,36 @@
151151

152152
КонецПроцедуры
153153

154+
Процедура ВыполнитьРазвернуть(Результат, ДополнительныеПараметры) Экспорт
155+
156+
Обработчик = ДополнительныеПараметры.Обработчик;
157+
158+
Лог.Отладка("ВыполнитьРазвернуть %1", Обработчик.ИмяПроцедуры);
159+
160+
Результат = Новый Массив;
161+
162+
Если Обработчик.ДополнительныеПараметры = Неопределено Тогда
163+
Обработчик.ДополнительныеПараметры = Новый Структура;
164+
КонецЕсли;
165+
Обработчик.ДополнительныеПараметры.Вставить("Элемент");
166+
167+
Для Каждого Элемент Из Коллекция Цикл
168+
Обработчик.ДополнительныеПараметры.Элемент = Элемент;
169+
РезультатРазворачивания = Элемент;
170+
ОписанияОповещений.ВыполнитьОбработкуОповещения(Обработчик, РезультатРазворачивания);
171+
172+
ДСО = СтрШаблон("Результат разворачивания для элемента %1 должен иметь тип ПроцессорКоллекций", Элемент);
173+
Ожидаем.Что(РезультатРазворачивания, ДСО).ИмеетТип("ПроцессорКоллекций");
174+
175+
РезультатРазворачивания.ДляКаждого(
176+
"ДополнительныеПараметры.Результат.Добавить(Элемент);",
177+
Новый Структура("Результат", Результат)
178+
);
179+
180+
КонецЦикла;
181+
182+
КонецПроцедуры
183+
154184
Процедура ВыполнитьСортировать(Результат, ДополнительныеПараметры) Экспорт
155185

156186
Обработчик = ДополнительныеПараметры.Обработчик;
@@ -189,6 +219,45 @@
189219

190220
КонецПроцедуры
191221

222+
Процедура ВыполнитьСортироватьПо(Результат, ДополнительныеПараметры) Экспорт
223+
224+
Обработчик = ДополнительныеПараметры.Обработчик;
225+
ИмяПоля = Обработчик.ДополнительныеПараметры.ИмяПоля;
226+
Лог.Отладка("ВыполнитьСортироватьПо %1", Обработчик.ИмяПроцедуры);
227+
228+
Результат = Коллекция;
229+
230+
Если Обработчик.ДополнительныеПараметры = Неопределено Тогда
231+
Обработчик.ДополнительныеПараметры = Новый Структура;
232+
КонецЕсли;
233+
Обработчик.ДополнительныеПараметры.Вставить("Элемент1");
234+
Обработчик.ДополнительныеПараметры.Вставить("Элемент2");
235+
236+
Для й = 0 По Результат.Количество() - 1 Цикл
237+
Флаг = Ложь;
238+
к = Результат.Количество() - 1;
239+
Пока к > й Цикл
240+
Элемент = Результат[к - 1];
241+
СледующийЭлемент = Результат[к];
242+
243+
Обработчик.ДополнительныеПараметры.Элемент1 = Элемент[ИмяПоля];
244+
Обработчик.ДополнительныеПараметры.Элемент2 = СледующийЭлемент[ИмяПоля];
245+
РезультатСортировки = Неопределено;
246+
ОписанияОповещений.ВыполнитьОбработкуОповещения(Обработчик, РезультатСортировки);
247+
Если РезультатСортировки > 0 Тогда
248+
Результат[к - 1] = СледующийЭлемент;
249+
Результат[к] = Элемент;
250+
Флаг = Истина;
251+
КонецЕсли;
252+
к = к - 1;
253+
КонецЦикла;
254+
Если НЕ Флаг Тогда
255+
Прервать;
256+
КонецЕсли;
257+
КонецЦикла;
258+
259+
КонецПроцедуры
260+
192261
Процедура Инициализация()
193262
Лог = Логирование.ПолучитьЛог("oscript.lib.stream");
194263
КонецПроцедуры

0 commit comments

Comments
 (0)