Skip to content

Commit

Permalink
Возможность указать переменные среды в Json (vanessa-opensource#511)
Browse files Browse the repository at this point in the history
* Возможность указать переменные среды в Json

Добавил возможность использовать переменные среды в JSON

* Исправил ошибку. 

Заменил Элемент.Значение на Значение подстановки

* Исправление замечаний

1) Изменил логирование
2) Заменил регулярку на СтрЗаменить

* ups

* Update ОбщиеМетоды.os

* выделена переменная ИмяПеременнойСреды
Добавлена возможность присвоить пустое значение переменной

* Уточнил регулярку - исключил невалидные символы

Co-authored-by: ivanovEV <[email protected]>
Co-authored-by: Artur Ayukhanov <[email protected]>
  • Loading branch information
3 people authored Jan 26, 2023
1 parent d8cfa7d commit 1cc32e6
Showing 1 changed file with 36 additions and 5 deletions.
41 changes: 36 additions & 5 deletions src/Модули/ОбщиеМетоды.os
Original file line number Diff line number Diff line change
Expand Up @@ -152,17 +152,23 @@
Если КоллекцияДоп = Неопределено Тогда
Возврат;
КонецЕсли;

ПолучитьЛог();
Для Каждого Элемент Из КоллекцияДоп Цикл
Лог.Отладка("Обрабатываю параметр: %1", Элемент.Ключ);
ЗначениеПодстановки = Элемент.Значение;
Лог.Отладка("Значение параметра: %1 Тип: %2", ЗначениеПодстановки, ТипЗнч(ЗначениеПодстановки));
Если ТипЗнч(ЗначениеПодстановки) = Тип("Строка") Тогда
ЗначениеПодстановки = ПодставитьЗначенияПеременныхСреды(ЗначениеПодстановки);
КонецЕсли;
Значение = КоллекцияОсновная.Получить(Элемент.Ключ);
Если Значение = Неопределено Тогда
КоллекцияОсновная.Вставить(Элемент.Ключ, Элемент.Значение);
КоллекцияОсновная.Вставить(Элемент.Ключ, ЗначениеПодстановки);
ИначеЕсли ТипЗнч(Значение) = Тип("Булево") И НЕ Значение Тогда
Если ТипЗнч(Элемент.Значение) = Тип("Строка") Тогда
Если Элемент.Значение = "1" ИЛИ Нрег(Элемент.Значение) = "истина" ИЛИ Нрег(Элемент.Значение) = "true" Тогда
Если ТипЗнч(ЗначениеПодстановки) = Тип("Строка") Тогда
Если ЗначениеПодстановки = "1" ИЛИ Нрег(ЗначениеПодстановки) = "истина" ИЛИ Нрег(ЗначениеПодстановки) = "true" Тогда
КоллекцияОсновная.Вставить(Элемент.Ключ, Истина);
КонецЕсли;
ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("Булево") И Элемент.Значение Тогда
ИначеЕсли ТипЗнч(ЗначениеПодстановки) = Тип("Булево") И ЗначениеПодстановки Тогда
КоллекцияОсновная.Вставить(Элемент.Ключ, Истина);
КонецЕсли;
КонецЕсли;
Expand Down Expand Up @@ -546,5 +552,30 @@
Возврат ТекстИсключения;
КонецФункции

// Подменяет значения параметров значением переменных среды.
//
// Параметры:
// СтрокаПодстановки - Строка - Строка в которую необходимо подставить переменные среды
// Возвращаемое значение:
// Строка - Значение после подстановки переменных среды
//
Функция ПодставитьЗначенияПеременныхСреды(СтрокаПодстановки)
СтрокаРезультат = СтрокаПодстановки;
ПолучитьЛог();
РВ = Новый РегулярноеВыражение("(?<=\${)([^\s{"]*?)(?=})");
Совпадения = РВ.НайтиСовпадения(СтрокаПодстановки);
Для каждого Совпадение Из Совпадения Цикл
ИмяПеременнойСреды = Совпадение.Значение;
ЗначениеПеременнойСреды = ПолучитьПеременнуюСреды(ИмяПеременнойСреды);
Если Не ЗначениеЗаполнено(ЗначениеПеременнойСреды) Тогда
Лог.Отладка("Не удалось получить значение переменной среды, или передано пустое значение: %1", ИмяПеременнойСреды);
КонецЕсли;
СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "${" + ИмяПеременнойСреды + "}", ЗначениеПеременнойСреды);
Лог.Отладка("Значение переменной среды ""%1"" изменено на ""%2""", ИмяПеременнойСреды, ЗначениеПеременнойСреды);
КонецЦикла;
Возврат СтрокаРезультат;
КонецФункции
// из-за особенностей загрузки модуль ОбщиеМетоды грузится раньше ПараметрыСистемы,
// поэтому сразу в конце кода модуля использовать ПараметрыСистемы нельзя

0 comments on commit 1cc32e6

Please sign in to comment.