Skip to content

Commit

Permalink
Merge branch 'release/v0.4.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Nov 22, 2019
2 parents 4c7d20b + edaad09 commit ed2b184
Show file tree
Hide file tree
Showing 11 changed files with 524 additions and 50 deletions.
9 changes: 7 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
language: none

sudo: required

dist: trusty

git:
depth: false

addons:
sonarqube: true

jdk:
- oraclejdk8
- openjdk11

before_install:
- sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
- echo "deb http://download.mono-project.com/repo/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/mono-official.list
- sudo apt-get update
- sudo apt-get install mono-complete mono-devel
- wget -O os.deb http://oscript.io/downloads/night-build/deb
- wget -O os.deb http://oscript.io/downloads/1_0_21/deb
- sudo dpkg -i os.deb; sudo apt install -f
- sudo opm install 1commands
- sudo opm install 1testrunner
Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
## 0.4.0

* Добавлен конвейерный метод Развернуть/flatMap
* Добавлено создание процессора коллекций из набора параметров (varargs...)

## 0.3.1

* Реальный переезд на использование API `Новый ОписаниеОповещения()`

## 0.3.0

* Обновление `notify` до версии `0.2.0`
* Отказ от создания временных файлов в пользу создания описания оповещения через `ЗагрузитьСценарийИзСтроки`
* Переезд на движок версии `1.0.18`

## 0.2.2

* Исправлена ошибка неудаления временных файлов при вызове некоторых терминальных методов
Expand Down
113 changes: 110 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# fluent

[![Build Status](https://travis-ci.org/nixel2007/oscript-fluent.svg?branch=develop)](https://travis-ci.org/nixel2007/oscript-fluent)
[![Quality Gate](https://sonar.silverbulleters.org/api/badges/gate?key=oscript-fluent)](https://sonar.silverbulleters.org/dashboard/index/oscript-fluent)
[![Coverage](https://sonar.silverbulleters.org/api/badges/measure?key=oscript-fluent&metric=coverage)](https://sonar.silverbulleters.org/dashboard/index/oscript-fluent)
[![Tech debt](https://sonar.silverbulleters.org/api/badges/measure?key=oscript-fluent&metric=sqale_debt_ratio)](https://sonar.silverbulleters.org/dashboard/index/oscript-fluent)
[![Quality Gate](https://sonar.oscript.ru/api/project_badges/measure?project=oscript-fluent&metric=alert_status)](https://sonar.oscript.ru/dashboard?id=oscript-fluent)
[![Maintainability](https://sonar.oscript.ru/api/project_badges/measure?project=oscript-fluent&metric=sqale_rating)](https://sonar.oscript.ru/dashboard?id=oscript-fluent)
[![Coverage](https://sonar.oscript.ru/api/project_badges/measure?project=oscript-fluent&metric=coverage)](https://sonar.oscript.ru/dashboard?id=oscript-fluent)

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

Expand All @@ -14,14 +15,18 @@
> Структуры и соответствия incoming
Конвейерные методы:

* Первые
* Пропустить
* Различные
* Обработать
* Развернуть
* Фильтровать
* Сортировать
* СортироватьПо

Терминальные методы:

* ПолучитьПервый
* ВМассив
* ВСтроку
Expand All @@ -36,12 +41,15 @@
* ВсеНеСоответствуют

Функции сравнения, фильтрации, обработки могут задаваться с помощью:

* Строк
* Описаний оповещения (библиотека [notify](https://github.com/oscript-library/notify))

Библиотека помимо конструктора класса `ПроцессорКоллекций` содержит вспомогательный модуль, включающий:

* построитель процессора коллекций `ИзКоллекции()`
* построитель процессора коллекций `ИзСтроки()`
* построитель процессора коллекций `ИзНабора()`
* `СтандартнаяФункцияСравнения()` - типовой `comparator`, возвращающий результат сравнения как `1`, `0`, `-1`
* `СтандартнаяФункцияОбработки_Сообщить()` - функция сообщения каждого элемента в консоль

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

#### Развернуть

```bsl
// Развернуть каждый элемент коллекции в процессор коллекций.
// Позволяет расширить имеющуюся коллекцию.
// Например, разворачивание массива массивов сделает новый массив, содерщщий все элементы всех массивов.
// Конвейерный метод.
//
// Параметры:
// ФункцияРазворачивания - Строка, ОписаниеОповещения - функция разворачивания.
// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные
// "Результат", "ДополнительныеПараметры", "Элемент".
// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра
// (имена произвольные):
// Результат - ПроцессорКоллекций - Переменная, в которую должен быть
// помещен результат работы функции в виде ПроцессораКоллекций.
// ДополнительныеПараметры - Структура - Структура параметров, передаваемая функции разворачивания.
//
// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции разворачивания.
// Служит для передачи дополнительных данных из прикладного кода в функцию разворачивания.
// По умолчанию содержит одно значение - Элемент.
//
// Возвращаемое значение:
// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
// Примеры:
// 1:
// ПроцессорКоллекций.Развернуть("Результат = ПроцессорыКоллекций.ИзСтроки(Элемент);");
//
// 2:
// Процедура МояФункцияРазворачивания(Результат, ДополнительныеПараметры) Экспорт
// Результат = ПроцессорыКоллекций.ИзСтроки(ДополнительныеПараметры.Элемент);
// КонецПроцедуры
//
// ФункцияРазворачивания = Новый ОписаниеОповещения("МояФункцияРазворачивания", ЭтотОбъект);
// ПроцессорКоллекций.Развернуть(ФункцияРазворачивания);
//
Функция Развернуть(Знач ФункцияРазворачивания, Знач ДополнительныеПараметры = Неопределено) Экспорт
```

#### Фильтровать

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

#### СортироватьПо

```bsl
// Сортировать элементы коллекции по выбранному полю.
// Конвейерный метод.
//
// Параметры:
// ИмяПоля - Строка - Имя поля элемента коллекции, по которому необходимо осуществлять сортировку.
//
// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения.
// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные
// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2".
// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра
// (имена произвольные):
// "Результат" - Булево - Переменная, в которой возвращается значение работы функции.
// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции.
// Если параметр не передан, выполняется стандартная функция сравнения:
// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения()
//
// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения.
// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения.
// По умолчанию содержит два значения - Элемент1 и Элемент2.
//
// Возвращаемое значение:
// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
// Примеры:
// 1:
// ПроцессорКоллекций.СортироватьПо("НомерСтроки", "Результат = Элемент1 > Элемент2");
//
// 2:
// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт
// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2;
// КонецПроцедуры
//
// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект);
// ПроцессорКоллекций.СортироватьПо("НомерСтроки", ФункцияСравнения);
//
Функция СортироватьПо(Знач ИмяПоля, Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
```

> Терминальные методы
#### ПолучитьПервый
Expand Down Expand Up @@ -680,6 +769,24 @@
Функция ИзСтроки(Строка, РазделительСтрок = Неопределено, ВключатьПустые = Истина) Экспорт
```

#### ИзНабора

```bsl
// Создать ПроцессорКоллекций на основании переданного набора значений.
// Добавляет элемент в ПроцессорКоллекций, если он не равен NULL.
//
// Параметры:
// Элемент1 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
// Элемент2 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
// Элемент3 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
// ... Всего 32 параметра ...
//
// Возвращаемое значение:
// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданным набором.
//
Функция ИзНабора(Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, ...) Экспорт
```

#### СтандартнаяФункцияСравнения

```bsl
Expand Down
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@

Описание.Имя("fluent")
.Версия("0.3.1")
.Версия("0.4.0")
.Описание("Библиотека для работы с коллекциями в ""текучем"" стиле")
.Автор("Nikita Gryzlov")
.АдресАвтора("nixel2007@gmail.com")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,36 @@

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

Процедура ВыполнитьРазвернуть(Результат, ДополнительныеПараметры) Экспорт

Обработчик = ДополнительныеПараметры.Обработчик;

Лог.Отладка("ВыполнитьРазвернуть %1", Обработчик.ИмяПроцедуры);

Результат = Новый Массив;

Если Обработчик.ДополнительныеПараметры = Неопределено Тогда
Обработчик.ДополнительныеПараметры = Новый Структура;
КонецЕсли;
Обработчик.ДополнительныеПараметры.Вставить("Элемент");

Для Каждого Элемент Из Коллекция Цикл
Обработчик.ДополнительныеПараметры.Элемент = Элемент;
РезультатРазворачивания = Элемент;
ОписанияОповещений.ВыполнитьОбработкуОповещения(Обработчик, РезультатРазворачивания);

ДСО = СтрШаблон("Результат разворачивания для элемента %1 должен иметь тип ПроцессорКоллекций", Элемент);
Ожидаем.Что(РезультатРазворачивания, ДСО).ИмеетТип("ПроцессорКоллекций");

РезультатРазворачивания.ДляКаждого(
"ДополнительныеПараметры.Результат.Добавить(Элемент);",
Новый Структура("Результат", Результат)
);

КонецЦикла;

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

Процедура ВыполнитьСортировать(Результат, ДополнительныеПараметры) Экспорт

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

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

Процедура ВыполнитьСортироватьПо(Результат, ДополнительныеПараметры) Экспорт

Обработчик = ДополнительныеПараметры.Обработчик;
ИмяПоля = Обработчик.ДополнительныеПараметры.ИмяПоля;
Лог.Отладка("ВыполнитьСортироватьПо %1", Обработчик.ИмяПроцедуры);

Результат = Коллекция;

Если Обработчик.ДополнительныеПараметры = Неопределено Тогда
Обработчик.ДополнительныеПараметры = Новый Структура;
КонецЕсли;
Обработчик.ДополнительныеПараметры.Вставить("Элемент1");
Обработчик.ДополнительныеПараметры.Вставить("Элемент2");

Для й = 0 По Результат.Количество() - 1 Цикл
Флаг = Ложь;
к = Результат.Количество() - 1;
Пока к > й Цикл
Элемент = Результат[к - 1];
СледующийЭлемент = Результат[к];

Обработчик.ДополнительныеПараметры.Элемент1 = Элемент[ИмяПоля];
Обработчик.ДополнительныеПараметры.Элемент2 = СледующийЭлемент[ИмяПоля];
РезультатСортировки = Неопределено;
ОписанияОповещений.ВыполнитьОбработкуОповещения(Обработчик, РезультатСортировки);
Если РезультатСортировки > 0 Тогда
Результат[к - 1] = СледующийЭлемент;
Результат[к] = Элемент;
Флаг = Истина;
КонецЕсли;
к = к - 1;
КонецЦикла;
Если НЕ Флаг Тогда
Прервать;
КонецЕсли;
КонецЦикла;

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

Процедура Инициализация()
Лог = Логирование.ПолучитьЛог("oscript.lib.stream");
КонецПроцедуры
Expand Down
Loading

0 comments on commit ed2b184

Please sign in to comment.