Skip to content

Commit 41b80e3

Browse files
committed
Возможность передавать в качестве обработчика строку, приводимую к описанию оповещения
1 parent 2518ad9 commit 41b80e3

File tree

4 files changed

+132
-17
lines changed

4 files changed

+132
-17
lines changed

github.os

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,17 @@
5757
Сообщить(Элемент.Имя);
5858
КонецЦикла;
5959

60-
// githubUsers.sort(_.followers)
60+
Потоки.ИзКоллекции(Таблица)
61+
.Фильтровать("Результат = ДополнительныеПараметры.Элемент.Местоположение = ""Россия""")
62+
.Сортировать("Результат = ДополнительныеПараметры.Элемент1.Фолловеры < ДополнительныеПараметры.Элемент2.Фолловеры")
63+
.Первые(5)
64+
.Сортировать("Результат = ДополнительныеПараметры.Элемент1.Контрибьюции < ДополнительныеПараметры.Элемент2.Контрибьюции")
65+
.Первые(3)
66+
.ДляКаждого("Сообщить(ДополнительныеПараметры.Элемент.Имя)");
67+
68+
// githubUsers
6169
// .filter(_.location == 'Russia')
70+
// .sort(_.followers)
6271
// .take(1000)
6372
// .sort(_.contributions)
6473
// .take(256)

src/Классы/Поток.os

Lines changed: 110 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
#Использовать notify
22
#Использовать logos
3+
#Использовать tempfiles
34

45
Перем Лог;
56

67
Перем Конвейер;
78
Перем ПотокСлужебный;
9+
Перем ЛокальныйМенеджерВременныхФайлов;
10+
Перем ВременныеОписанияОповещений;
811

912
// Общее API
1013

@@ -35,35 +38,51 @@
3538

3639
КонецФункции
3740

38-
Функция Различные(ОбработчикСравнения = Неопределено) Экспорт
41+
Функция Различные(Знач ОбработчикСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
3942

4043
Если ОбработчикСравнения = Неопределено Тогда
4144
ОбработчикСравнения = Потоки.СтандартныйОбработчикСравнения();
45+
Иначе
46+
Если ТипЗнч(ОбработчикСравнения) = Тип("Строка") Тогда
47+
ОбработчикСравнения = СформироватьВременноеОписаниеОповещения(ОбработчикСравнения, ДополнительныеПараметры);
48+
КонецЕсли;
4249
КонецЕсли;
4350

4451
ПоложитьЯчейкуВКонвейер("Различные", ОбработчикСравнения);
4552
Возврат ЭтотОбъект;
4653

4754
КонецФункции
4855

49-
Функция Обработать(ОписаниеОповещения) Экспорт
56+
Функция Обработать(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт
57+
58+
Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда
59+
ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры);
60+
КонецЕсли;
5061

5162
ПоложитьЯчейкуВКонвейер("Обработать", ОписаниеОповещения);
5263
Возврат ЭтотОбъект;
5364

5465
КонецФункции
5566

56-
Функция Фильтровать(ОписаниеОповещения) Экспорт
57-
67+
Функция Фильтровать(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт
68+
69+
Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда
70+
ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры);
71+
КонецЕсли;
72+
5873
ПоложитьЯчейкуВКонвейер("Фильтровать", ОписаниеОповещения);
5974
Возврат ЭтотОбъект;
6075

6176
КонецФункции
6277

63-
Функция Сортировать(Знач ОбработчикСравнения = Неопределено) Экспорт
78+
Функция Сортировать(Знач ОбработчикСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
6479

6580
Если ОбработчикСравнения = Неопределено Тогда
6681
ОбработчикСравнения = Потоки.СтандартныйОбработчикСравнения();
82+
Иначе
83+
Если ТипЗнч(ОбработчикСравнения) = Тип("Строка") Тогда
84+
ОбработчикСравнения = СформироватьВременноеОписаниеОповещения(ОбработчикСравнения, ДополнительныеПараметры);
85+
КонецЕсли;
6786
КонецЕсли;
6887

6988
ПоложитьЯчейкуВКонвейер("Сортировать", ОбработчикСравнения);
@@ -132,10 +151,14 @@
132151

133152
КонецФункции
134153

135-
Функция ДляКаждого(ОписаниеОповещения) Экспорт
154+
Функция ДляКаждого(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт
136155

137156
Лог.Отладка("ДляКаждого");
138-
157+
158+
Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда
159+
ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры);
160+
КонецЕсли;
161+
139162
ПройтиКонвейер();
140163

141164
Результат = Новый Массив;
@@ -144,16 +167,22 @@
144167

145168
ПотокСлужебный.ВыполнитьОбработать(Результат, ДополнительныеПараметры);
146169

170+
ОчиститьВременныеОписанияОповещений();
171+
147172
Возврат Результат;
148173

149174
КонецФункции
150175

151-
Функция Минимум(ОбработчикСравнения = Неопределено) Экспорт
176+
Функция Минимум(Знач ОбработчикСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
152177

153178
Лог.Отладка("Минимум");
154179

155180
Если ОбработчикСравнения = Неопределено Тогда
156181
ОбработчикСравнения = Потоки.СтандартныйОбработчикСравнения();
182+
Иначе
183+
Если ТипЗнч(ОбработчикСравнения) = Тип("Строка") Тогда
184+
ОбработчикСравнения = СформироватьВременноеОписаниеОповещения(ОбработчикСравнения, ДополнительныеПараметры);
185+
КонецЕсли;
157186
КонецЕсли;
158187

159188
ПройтиКонвейер();
@@ -164,6 +193,8 @@
164193

165194
ПотокСлужебный.ВыполнитьСортировать(Результат, ДополнительныеПараметры);
166195

196+
ОчиститьВременныеОписанияОповещений();
197+
167198
Если Результат.Количество() = 0 Тогда
168199
Возврат Неопределено;
169200
Иначе
@@ -172,12 +203,16 @@
172203

173204
КонецФункции
174205

175-
Функция Максимум(ОбработчикСравнения = Неопределено) Экспорт
206+
Функция Максимум(Знач ОбработчикСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
176207

177208
Лог.Отладка("Максимум");
178209

179210
Если ОбработчикСравнения = Неопределено Тогда
180211
ОбработчикСравнения = Потоки.СтандартныйОбработчикСравнения();
212+
Иначе
213+
Если ТипЗнч(ОбработчикСравнения) = Тип("Строка") Тогда
214+
ОбработчикСравнения = СформироватьВременноеОписаниеОповещения(ОбработчикСравнения, ДополнительныеПараметры);
215+
КонецЕсли;
181216
КонецЕсли;
182217

183218
ПройтиКонвейер();
@@ -188,6 +223,8 @@
188223

189224
ПотокСлужебный.ВыполнитьСортировать(Результат, ДополнительныеПараметры);
190225

226+
ОчиститьВременныеОписанияОповещений();
227+
191228
Если Результат.Количество() = 0 Тогда
192229
Возврат Неопределено;
193230
Иначе
@@ -196,10 +233,14 @@
196233

197234
КонецФункции
198235

199-
Функция Сократить(Обработчик, НачальноеЗначение = Неопределено) Экспорт
236+
Функция Сократить(Знач Обработчик, Знач НачальноеЗначение = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
200237

201238
Лог.Отладка("Сократить");
202239

240+
Если ТипЗнч(Обработчик) = Тип("Строка") Тогда
241+
Обработчик = СформироватьВременноеОписаниеОповещения(Обработчик, ДополнительныеПараметры);
242+
КонецЕсли;
243+
203244
ПройтиКонвейер();
204245

205246
Результат = НачальноеЗначение;
@@ -212,6 +253,8 @@
212253
ОписанияОповещений.ВыполнитьОбработкуОповещения(Обработчик, Результат);
213254
КонецЦикла;
214255

256+
ОчиститьВременныеОписанияОповещений();
257+
215258
Возврат Результат;
216259

217260
КонецФункции
@@ -224,7 +267,6 @@
224267

225268
Коллекция = ПотокСлужебный.ПолучитьКоллекцию();
226269
КэшКолонок = ПотокСлужебный.ПолучитьКэшКолонок();
227-
Лог.Информация(КэшКолонок.Количество());
228270

229271
Результат = Новый(ТипРезультата);
230272

@@ -264,10 +306,14 @@
264306

265307
КонецФункции
266308

267-
Функция ЛюбойСоответствует(ОписаниеОповещения) Экспорт
309+
Функция ЛюбойСоответствует(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт
268310

269311
Лог.Отладка("ЛюбойСоответствует");
270312

313+
Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда
314+
ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры);
315+
КонецЕсли;
316+
271317
ПройтиКонвейер();
272318

273319
Коллекция = ПотокСлужебный.ПолучитьКоллекцию();
@@ -289,14 +335,20 @@
289335
КонецЕсли;
290336
КонецЦикла;
291337

338+
ОчиститьВременныеОписанияОповещений();
339+
292340
Возврат Результат;
293341

294342
КонецФункции
295343

296-
Функция ВсеСоответствуют(ОписаниеОповещения) Экспорт
344+
Функция ВсеСоответствуют(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт
297345

298346
Лог.Отладка("ВсеСоответствуют");
299347

348+
Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда
349+
ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры);
350+
КонецЕсли;
351+
300352
ПройтиКонвейер();
301353

302354
Коллекция = ПотокСлужебный.ПолучитьКоллекцию();
@@ -317,15 +369,21 @@
317369
Прервать;
318370
КонецЕсли;
319371
КонецЦикла;
372+
373+
ОчиститьВременныеОписанияОповещений();
320374

321375
Возврат Результат;
322376

323377
КонецФункции
324378

325-
Функция ВсеНеСоответствуют(ОписаниеОповещения) Экспорт
379+
Функция ВсеНеСоответствуют(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт
326380

327381
Лог.Отладка("ВсеНеСоответствуют");
328382

383+
Если ТипЗнч(ОписаниеОповещения) = Тип("Строка") Тогда
384+
ОписаниеОповещения = СформироватьВременноеОписаниеОповещения(ОписаниеОповещения, ДополнительныеПараметры);
385+
КонецЕсли;
386+
329387
ПройтиКонвейер();
330388

331389
Коллекция = ПотокСлужебный.ПолучитьКоллекцию();
@@ -346,6 +404,8 @@
346404
Прервать;
347405
КонецЕсли;
348406
КонецЦикла;
407+
408+
ОчиститьВременныеОписанияОповещений();
349409

350410
Возврат Результат;
351411

@@ -396,8 +456,44 @@
396456

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

459+
Функция СформироватьВременноеОписаниеОповещения(ПользовательскоеВыражение, ДополнительныеПараметры)
460+
461+
Если ДополнительныеПараметры = Неопределено Тогда
462+
ДополнительныеПараметры = Новый Структура;
463+
КонецЕсли;
464+
465+
ПутьКФайлуШаблона = ОбъединитьПути(ТекущийСценарий().Каталог, "ШаблонИзолированногоКласса.os");
466+
ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуШаблона, КодировкаТекста.UTF8NoBom);
467+
ТекстИзолированногоКласса = ЧтениеТекста.Прочитать();
468+
469+
ТекстИзолированногоКласса = СтрЗаменить(ТекстИзолированногоКласса, "А = 0;", ПользовательскоеВыражение);
470+
471+
ВременныйФайл = ЛокальныйМенеджерВременныхФайлов.НовоеИмяФайла("os");
472+
ЗаписьТекста = Новый ЗаписьТекста(ВременныйФайл);
473+
ЗаписьТекста.Записать(ТекстИзолированногоКласса);
474+
ЗаписьТекста.Закрыть();
475+
476+
ВременныйСценарий = ЗагрузитьСценарий(ВременныйФайл);
477+
478+
ОписаниеОповещения = ОписанияОповещений.Создать(
479+
"ОбработкаОповещения",
480+
ВременныйСценарий,
481+
ДополнительныеПараметры
482+
);
483+
484+
Возврат ОписаниеОповещения;
485+
486+
КонецФункции
487+
488+
Процедура ОчиститьВременныеОписанияОповещений()
489+
ЛокальныйМенеджерВременныхФайлов.Удалить();
490+
ВременныеОписанияОповещений = Новый Массив;
491+
КонецПроцедуры
492+
399493
Процедура Инициализация()
400494
Конвейер = Новый Массив;
495+
ВременныеОписанияОповещений = Новый Массив;
496+
ЛокальныйМенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
401497
Лог = Логирование.ПолучитьЛог("oscript.lib.stream");
402498

403499
ПутьКСценарию_ПотокСлужебный = ОбъединитьПути(ТекущийСценарий().Каталог, "ПотокСлужебный.os");
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Процедура ОбработкаОповещения(Результат, ДополнительныеПараметры) Экспорт
2+
3+
А = 0;
4+
5+
КонецПроцедуры

test.os

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,15 @@
8484
.ДляКаждого(Потоки.СтандартныйОбработчик_Сообщить());
8585

8686
Строка =
87-
|многострочная
88-
|строка";
87+
|строка
88+
|многострочная";
8989

9090
Потоки
9191
.ИзСтроки(Строка, Символы.ПС)
9292
.Сортировать()
9393
.ДляКаждого(Потоки.СтандартныйОбработчик_Сообщить());
94+
95+
Потоки
96+
.ИзСтроки(Строка, Символы.ПС)
97+
.Фильтровать("Результат = СтрДлина(ДополнительныеПараметры.Элемент) > 1")
98+
.ДляКаждого("Сообщить(ДополнительныеПараметры.Элемент)");

0 commit comments

Comments
 (0)