From 37aa3f8c104e31e3d5ba8b90c4a908a236e49b76 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Thu, 27 Jul 2023 12:47:37 +1000 Subject: [PATCH 1/4] =?UTF-8?q?1.=20=D0=9F=D0=BE=D0=B4=D0=BD=D1=8F=D1=82?= =?UTF-8?q?=D0=B0=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BE=D1=82=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=B2=D0=B8=D0=B6=D0=BA=D0=B0=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D1=83=D0=B0=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20?= =?UTF-8?q?2.=20=D0=9F=D0=BE=D0=B4=D0=BD=D1=8F=D1=82=D1=8B=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=82=20=D0=B4=D0=B2=D0=B8=D0=B6=D0=BA=D0=B0=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20GA=203.=20=D0=9F=D0=BE=D0=B4=D0=BD=D1=8F=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D1=82=20=D0=B1=D0=B8=D0=B1=D0=BB=D0=B8=D0=BE?= =?UTF-8?q?=D1=82=D0=B5=D0=BA=D0=B8=20fluent=204.=20=D0=98=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?fluent=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=20=D0=BD=D0=B0=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=B2?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82=20=D0=BB=D1=8F=D0=BC=D0=B1?= =?UTF-8?q?=D0=B4=D0=B0=20=D0=B2=D1=8B=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9=205.=20=D0=9F=D0=BE=D1=87=D0=B8=D0=BD=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/testing.yml | 2 +- packagedef | 6 +-- ...20\265\321\202\321\200\320\276\320\262.os" | 51 ++++++------------- ...20\265\321\202\321\200\320\276\320\262.os" | 32 +++++------- ...0\320\276\320\271\320\272\320\270_test.os" | 4 +- ...5\321\202\321\200\320\276\320\262_test.os" | 8 +-- 8 files changed, 39 insertions(+), 68 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 34b08cd..31f8454 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - oscript_version: ['1.4.0', '1.5.0'] + oscript_version: ['1.8.3', 'stable'] steps: # Загрузка проекта diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 16b4c75..fabc4ec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - oscript_version: ['1.4.0'] + oscript_version: ['1.8.3'] package_mask: ["configor-*.ospx"] steps: diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 3744831..70de08e 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - oscript_version: ['1.4.0', '1.5.0'] + oscript_version: ['1.8.3', 'stable'] steps: # Загрузка проекта diff --git a/packagedef b/packagedef index bf235d3..d3c9048 100644 --- a/packagedef +++ b/packagedef @@ -4,11 +4,11 @@ // Описание.Имя("configor") - .Версия("0.7.1") + .Версия("0.7.2") .Автор("Khorev Aleksey") .АдресАвтора("Khorevaa@gmail.com") .Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml") - .ВерсияСреды("1.0.19") + .ВерсияСреды("1.8.3") .ВключитьФайл("src") .ВключитьФайл("docs") //.ВключитьФайл("tests") @@ -16,7 +16,7 @@ .ЗависитОт("json") .ЗависитОт("yaml") .ЗависитОт("asserts") - .ЗависитОт("fluent", "0.3.1") + .ЗависитОт("fluent", "0.6.0") .ЗависитОт("notify", "0.2.0") .ЗависитОт("tempfiles") .ЗависитОт("reflector", "0.3.1") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index c1dfc38..52d7003 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\271\320\273\320\276\320\262\321\213\320\271\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -172,15 +172,22 @@ ИндексКаталоговПоиска = Новый Массив; СформироватьИндексКаталогПоиска(); - - ФункцияСортировки = Новый ОписаниеОповещения("СортироватьКаталогиПоискаФайлов", ЭтотОбъект); КоллекцияФайловПараметров = Новый ПроцессорКоллекций; КоллекцияФайловПараметров.УстановитьКоллекцию(ИндексКаталоговПоиска); КоличествоФайлов = КоллекцияФайловПараметров - .Сортировать(ФункцияСортировки) - .Фильтровать("Результат = Элемент.ПоискФайла()") + .Сортировать("(Первый, Второй) -> { + | Если ВРЕГ(НаправлениеСортировки) = ВРег(""УБЫВ"") Тогда + | Возврат ПроцессорыКоллекций.СтандартнаяФункцияСравненияОбратныйПорядок() + | .Выполнить(Первый.Приоритет(), Второй.Приоритет()); + | Иначе + | Возврат ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок() + | .Выполнить(Первый.Приоритет(), Второй.Приоритет()); + | КонецЕсли; + |}", + ЭтотОбъект) + .Фильтровать("Элемент -> Элемент.ПоискФайла()") .Количество(); Если КоличествоФайлов = 0 Тогда @@ -196,7 +203,9 @@ Иначе ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикВыполненияЧтениеФайловогоПровайдера", ЭтотОбъект); - КоллекцияФайловПараметров.ДляКаждого(ФункцияОбработки); + КоллекцияФайловПараметров.ДляКаждого( + "КаталогПоиска -> ВыполнитьЧтениеФайловогоПровайдера(КаталогПоиска.ИмяФайла());" + ); КонецЕсли; @@ -222,7 +231,7 @@ КонецПроцедуры -Процедура ВыполнитьЧтениеФайловогоПровайдера(Знач ИмяФайлаПараметров) +Процедура ВыполнитьЧтениеФайловогоПровайдера(Знач ИмяФайлаПараметров) Экспорт РезультатЧтенияФайла = ВыполнитьЧтениеПровайдера(ИмяФайлаПараметров); @@ -243,36 +252,6 @@ КонецФункции -// Обработчик сортировки каталогов поиска файлов -// -// Параметры: -// Результат - Объект.КаталогПоискаФайла - Элемент массива каталогов поиска -// ДополнительныеПараметры - Структура - дополнительная структура -// -Процедура СортироватьКаталогиПоискаФайлов(Результат, ДополнительныеПараметры) Экспорт - - Если ВРЕГ(НаправлениеСортировки) = ВРег("УБЫВ") Тогда - Результат = ДополнительныеПараметры.Элемент1.Приоритет() < ДополнительныеПараметры.Элемент2.Приоритет(); - Иначе - Результат = ДополнительныеПараметры.Элемент1.Приоритет() > ДополнительныеПараметры.Элемент2.Приоритет(); - КонецЕсли; - -КонецПроцедуры - -// Обработчик выполнения чтения файлового провайдера -// -// Параметры: -// Результат - Объект.КаталогПоискаФайла - Элемент массива каталогов поиска -// ДополнительныеПараметры - Структура - дополнительная структура -// -Процедура ОбработчикВыполненияЧтениеФайловогоПровайдера(Результат, ДополнительныеПараметры) Экспорт - - КаталогПоиска = ДополнительныеПараметры.Элемент; - - ВыполнитьЧтениеФайловогоПровайдера(КаталогПоиска.ИмяФайла()); - -КонецПроцедуры - Процедура ОбъединитьРезультаты(ОсновноеСоответствие, ДобавляемоеСоответствие) Для каждого Элемент Из ДобавляемоеСоответствие Цикл diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" index dcfff97..b4bf79d 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262.os" @@ -299,36 +299,28 @@ КоллекцияПровайдеров.УстановитьКоллекцию(ПровайдерыПараметров); КоличествоПровайдеров = КоллекцияПровайдеров - .Сортировать("Результат = Элемент1.Значение.Приоритет > Элемент2.Значение.Приоритет") - .Фильтровать("Результат = Элемент.Значение.Включен") - .Количество(); + .Сортировать( + "(Первый, Второй) -> + | Возврат ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок() + | .Выполнить(Первый.Значение.Приоритет, Второй.Значение.Приоритет)", + ЭтотОбъект) + .Фильтровать("(Элемент) -> Элемент.Значение.Включен") + .Количество(); Если КоличествоПровайдеров = 0 Тогда Возврат; Иначе - ПроцедураЧтенияПровайдера = Новый ОписаниеОповещения("ОбработчикВыполненияЧтениеПровайдера", ЭтотОбъект); - КоллекцияПровайдеров.ДляКаждого(ПроцедураЧтенияПровайдера); + КоллекцияПровайдеров.ДляКаждого( + "(ПровайдерПараметров) -> ВыполнитьЧтениеДляПровайдера(ПровайдерПараметров.Значение)", + ЭтотОбъект + ); КонецЕсли; КонецПроцедуры -// Обработчик выполнения чтения провайдера -// -// Параметры: -// Результат - КлючЗначение - Элемент индекса провайдеров -// ДополнительныеПараметры - Структура - дополнительная структура -// -Процедура ОбработчикВыполненияЧтениеПровайдера(Результат, ДополнительныеПараметры) Экспорт - - Провайдер = ДополнительныеПараметры.Элемент.Значение; - - ВыполнитьЧтениеДляПровайдера(Провайдер); - -КонецПроцедуры - -Процедура ВыполнитьЧтениеДляПровайдера(КлассПровайдера) +Процедура ВыполнитьЧтениеДляПровайдера(КлассПровайдера) Экспорт ИдентификаторПровайдера = КлассПровайдера.Идентификатор; diff --git "a/tests/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270_test.os" "b/tests/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270_test.os" index cf6c4a9..b1b440b 100644 --- "a/tests/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270_test.os" +++ "b/tests/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270_test.os" @@ -287,7 +287,7 @@ Массив = Новый Массив(); - МассивЗначений = СтрРазделить(ЗначенияМассив, ", "); + МассивЗначений = СтрРазделить(ЗначенияМассив, ", ", Ложь); Для ИндексКлюча = 0 По МассивЗначений.ВГраница() Цикл @@ -317,7 +317,7 @@ КонецФункции Лог = Логирование.ПолучитьЛог("oscript.lib.configor.constructor"); -Лог.УстановитьУровень(УровниЛога.Отладка); +//Лог.УстановитьУровень(УровниЛога.Отладка); ЛогПровайдера = Логирование.ПолучитьЛог("oscript.lib.configor.provider-json"); // ЛогПровайдера.УстановитьУровень(УровниЛога.Отладка); \ No newline at end of file diff --git "a/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\247\321\202\320\265\320\275\320\270\321\217\320\277\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262_test.os" "b/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\247\321\202\320\265\320\275\320\270\321\217\320\277\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262_test.os" index eb6b5be..5dc187c 100644 --- "a/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\247\321\202\320\265\320\275\320\270\321\217\320\277\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262_test.os" +++ "b/tests/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\247\321\202\320\265\320\275\320\270\321\217\320\277\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262_test.os" @@ -152,7 +152,7 @@ Массив = Новый Массив(); - МассивЗначений = СтрРазделить(ЗначенияМассив, ", "); + МассивЗначений = СтрРазделить(ЗначенияМассив, ", ", Ложь); Для ИндексКлюча = 0 По МассивЗначений.ВГраница() Цикл @@ -168,8 +168,8 @@ Соответствие = Новый Соответствие(); - МассивКлючей = СтрРазделить(Ключи, ", "); - МассивЗначений = СтрРазделить(Значения, ", "); + МассивКлючей = СтрРазделить(Ключи, ", ", Ложь); + МассивЗначений = СтрРазделить(Значения, ", ", Ложь); Для ИндексКлюча = 0 По МассивКлючей.ВГраница() Цикл @@ -223,7 +223,7 @@ КонецФункции Лог = Логирование.ПолучитьЛог("oscript.lib.configor"); -Лог.УстановитьУровень(УровниЛога.Отладка); +//Лог.УстановитьУровень(УровниЛога.Отладка); ЛогПровайдера = Логирование.ПолучитьЛог("oscript.lib.configor.provider-json"); // ЛогПровайдера.УстановитьУровень(УровниЛога.Отладка); \ No newline at end of file From 17cfd31df8214110766839f5877de7a90d26734d Mon Sep 17 00:00:00 2001 From: sfaqer Date: Sun, 3 Sep 2023 18:40:09 +1000 Subject: [PATCH 2/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B0=D0=B9=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D1=87=D1=82=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B8=D0=B7=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20?= =?UTF-8?q?ini=20=D0=B8=20=D0=B8=D0=B7=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D1=8B=D1=85=20=D1=81=D1=80=D0=B5=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- ...265\321\202\321\200\320\276\320\262ENV.os" | 80 +++++++++++++ ...265\321\202\321\200\320\276\320\262INI.os" | 113 ++++++++++++++++++ tests/fixtures/test-config.ini | 6 + ...265\321\202\321\200\320\276\320\262ENV.os" | 44 +++++++ ...265\321\202\321\200\320\276\320\262INI.os" | 25 ++++ 6 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" create mode 100644 tests/fixtures/test-config.ini create mode 100644 "tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" create mode 100644 "tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" diff --git a/packagedef b/packagedef index d3c9048..63fdd77 100644 --- a/packagedef +++ b/packagedef @@ -4,7 +4,7 @@ // Описание.Имя("configor") - .Версия("0.7.2") + .Версия("0.8.0") .Автор("Khorev Aleksey") .АдресАвтора("Khorevaa@gmail.com") .Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" new file mode 100644 index 0000000..b635303 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" @@ -0,0 +1,80 @@ +#Использовать json +#Использовать asserts +#Использовать logos + +Перем Лог; +Перем Префикс; + +Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "") + Префикс = ПрефиксПеременныхСреды; +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Возвращает приоритет провайдера +// +// Возвращаемое значение: +// Число - текущий приоритет провайдера +// +Функция Приоритет() Экспорт + Возврат 1; +КонецФункции + +// Возвращает идентификатор провайдера +// +// Возвращаемое значение: +// Строка - текущий идентификатор провайдера +// +Функция Идентификатор() Экспорт + Возврат "env"; +КонецФункции + +// Возвращает тип провайдера +// +// Возвращаемое значение: +// Строка - текущий тип провайдера +// +Функция ТипПровайдера() Экспорт + Возврат "env"; +КонецФункции + +// Выполняет чтение параметров для провайдера +// +// Параметры: +// НастройкиПровайдера - Структура - структура настроек провайдера +// +// Возвращаемое значение: +// Соответствие - результат чтения провайдера +// +Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт + + Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс); + + ПеременныеСреды = ПеременныеСреды(); + + Если ПустаяСтрока(Префикс) Тогда + Возврат ПеременныеСреды; + КонецЕсли; + + ПрочитанныеПараметры = Новый Соответствие; + + Для каждого ПеременнаяСреды Из ПеременныеСреды Цикл + + Если СтрНачинаетсяС(ПеременнаяСреды.Ключ, Префикс) Тогда + + ПрочитанныеПараметры.Вставить( + Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - СтрДлина(Префикс)), + ПеременнаяСреды.Значение + ); + + КонецЕсли; + + КонецЦикла; + + Возврат ПрочитанныеПараметры; + +КонецФункции + +#КонецОбласти + +Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" new file mode 100644 index 0000000..a023565 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" @@ -0,0 +1,113 @@ +#Использовать json +#Использовать asserts +#Использовать logos + +Перем Лог; + +#Область ПрограммныйИнтерфейс + +// Возвращает приоритет провайдера +// +// Возвращаемое значение: +// Число - текущий приоритет провайдера +// +Функция Приоритет() Экспорт + Возврат 1; +КонецФункции + +// Возвращает идентификатор провайдера +// +// Возвращаемое значение: +// Строка - текущий идентификатор провайдера +// +Функция Идентификатор() Экспорт + Возврат "ini"; +КонецФункции + +// Возвращает тип провайдера +// +// Возвращаемое значение: +// Строка - текущий тип провайдера +// +Функция ТипПровайдера() Экспорт + Возврат "file"; +КонецФункции + +// Возвращает расширения файлов по умолчанию +// +// Возвращаемое значение: +// Строка - расширения файлов по умолчанию +// +Функция РасширенияФайлов() Экспорт + Возврат "ini"; +КонецФункции + +// Выполняет чтение параметров для провайдера +// +// Параметры: +// НастройкиПровайдера - Структура - структура настроек провайдера +// +// Возвращаемое значение: +// Соответствие - результат чтения провайдера +// +Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт + + ПрочитанныеПараметры = Новый Соответствие; + + ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат ПрочитанныеПараметры; + КонецЕсли; + + Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); + ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); + + Возврат ПрочитанныеПараметры; + +КонецФункции + +#КонецОбласти + +// Выполнить чтение настроек из файла +// +// Параметры: +// ПутьКФайлу - Cтрока - путь к файлу настроек +// Возвращаемое значение: +// Соответствие - итоговые параметры +// +Функция Прочитать(Знач ПутьКФайлу) + + НастройкиИзФайла = Новый Соответствие; + + ТД = Новый ТекстовыйДокумент(); + ТД.Прочитать(ПутьКФайлу); + + Для Сч = 1 По ТД.КоличествоСтрок() Цикл + + СтрокаНастроек = ТД.ПолучитьСтроку(Сч); + + Если ПустаяСтрока(СтрокаНастроек) или Лев(СтрокаНастроек, 1) = "#" Тогда + Продолжить; + КонецЕсли; + + Поз = СтрНайти(СтрокаНастроек, "="); + Если Поз = 0 Тогда + Продолжить; + КонецЕсли; + + Ключ = СокрЛП(Лев(СтрокаНастроек, Поз - 1)); + Значение = СокрЛП(Сред(СтрокаНастроек, Поз + 1)); + + НастройкиИзФайла.Вставить(Ключ, Значение); + + КонецЦикла; + + Лог.Отладка("Прочитан файл настроек %1", ПутьКФайлу); + + Возврат НастройкиИзФайла; + +КонецФункции // Прочитать + +Лог = Логирование.ПолучитьЛог("oscript.lib.configor.ini"); diff --git a/tests/fixtures/test-config.ini b/tests/fixtures/test-config.ini new file mode 100644 index 0000000..1731dfd --- /dev/null +++ b/tests/fixtures/test-config.ini @@ -0,0 +1,6 @@ +owner.contact.email=mail.ru +owner.contact.tel=77777777 + +admin.contact.email=admin.ru + +#person.address=home diff --git "a/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" new file mode 100644 index 0000000..8ccd0bc --- /dev/null +++ "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" @@ -0,0 +1,44 @@ +#использовать "../src/" +#Использовать asserts + +&Тест +Процедура ПроверитьПолучениеПеременныхСредыБезПрефикса() Экспорт + + // Дано + + УстановитьПеременнуюСреды("TestConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс); + + // Когда + + МенеджерПараметров = Новый МенеджерПараметров(); + + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV()); + + МенеджерПараметров.Прочитать(); + + // Тогда + + Ожидаем.Что(МенеджерПараметров.Параметр("TestConfigorEnv")).Равно("ТестЗначение"); + +КонецПроцедуры + +&Тест +Процедура ПроверитьПолучениеПеременныхСредыСПрефиксом() Экспорт + + // Дано + + УстановитьПеременнуюСреды("Test_ConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс); + + // Когда + + МенеджерПараметров = Новый МенеджерПараметров(); + + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV("Test_")); + + МенеджерПараметров.Прочитать(); + + // Тогда + + Ожидаем.Что(МенеджерПараметров.Параметр("ConfigorEnv")).Равно("ТестЗначение"); + +КонецПроцедуры diff --git "a/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" new file mode 100644 index 0000000..f27d3f0 --- /dev/null +++ "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" @@ -0,0 +1,25 @@ +#использовать "../src/" +#Использовать asserts + +&Тест +Процедура ПроверитьПолучениеПараметров() Экспорт + + // Дано + + МенеджерПараметров = Новый МенеджерПараметров(); + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровINI()); + МенеджерПараметров.УстановитьФайлПараметров(ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-config.ini")); + МенеджерПараметров.Прочитать(); + + // Когда + + МенеджерПараметров.Прочитать(); + + // Тогда + + Ожидаем.Что(МенеджерПараметров.Параметр("owner.contact.email")).Равно("mail.ru"); + Ожидаем.Что(МенеджерПараметров.Параметр("owner.contact.tel")).Равно("77777777"); + Ожидаем.Что(МенеджерПараметров.Параметр("admin.contact.email")).Равно("admin.ru"); + Ожидаем.Что(МенеджерПараметров.Параметр("person.address")).ЭтоНеопределено(); + +КонецПроцедуры From 0f005964e19ae643ec2732fce132979b2ac17c13 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Sun, 3 Sep 2023 18:58:53 +1000 Subject: [PATCH 3/4] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D0=B7=D0=B0=D0=BC?= =?UTF-8?q?=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" | 7 ++----- ...\320\274\320\265\321\202\321\200\320\276\320\262INI.os" | 2 -- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" index b635303..404f1a8 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262ENV.os" @@ -1,5 +1,3 @@ -#Использовать json -#Использовать asserts #Использовать logos Перем Лог; @@ -7,6 +5,7 @@ Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "") Префикс = ПрефиксПеременныхСреды; + Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env"); КонецПроцедуры #Область ПрограммныйИнтерфейс @@ -17,7 +16,7 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат 2; КонецФункции // Возвращает идентификатор провайдера @@ -76,5 +75,3 @@ КонецФункции #КонецОбласти - -Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" index a023565..3e14e84 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262INI.os" @@ -1,5 +1,3 @@ -#Использовать json -#Использовать asserts #Использовать logos Перем Лог; From 35fabc30e886480334791ec67a78bc5f71825d76 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Sun, 3 Sep 2023 19:06:17 +1000 Subject: [PATCH 4/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B0=D0=B9=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=91=D1=80=D1=82=D0=BA=D0=B0=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=B4=20=D1=81=D0=BE=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=B8=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\201\321\202\320\262\320\270\320\265.os" | 63 +++++++++++++++++++ ...21\201\321\202\320\262\320\270\320\265.os" | 48 ++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" create mode 100644 "tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" new file mode 100644 index 0000000..6952324 --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" @@ -0,0 +1,63 @@ +#Использовать logos + +Перем Лог; +Перем мПараметры; + +Процедура ПриСозданииОбъекта(Параметры) + + Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда + ВызватьИсключение + "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; + КонецЕсли; + + мПараметры = Параметры; + Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map"); + +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Возвращает приоритет провайдера +// +// Возвращаемое значение: +// Число - текущий приоритет провайдера +// +Функция Приоритет() Экспорт + Возврат 3; +КонецФункции + +// Возвращает идентификатор провайдера +// +// Возвращаемое значение: +// Строка - текущий идентификатор провайдера +// +Функция Идентификатор() Экспорт + Возврат "map"; +КонецФункции + +// Возвращает тип провайдера +// +// Возвращаемое значение: +// Строка - текущий тип провайдера +// +Функция ТипПровайдера() Экспорт + Возврат "memory"; +КонецФункции + +// Выполняет чтение параметров для провайдера +// +// Параметры: +// НастройкиПровайдера - Структура - структура настроек провайдера +// +// Возвращаемое значение: +// Соответствие - результат чтения провайдера +// +Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт + + Лог.Отладка("Считываю параметры из соответствия"); + + Возврат мПараметры; + +КонецФункции + +#КонецОбласти diff --git "a/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" new file mode 100644 index 0000000..7f6fc42 --- /dev/null +++ "b/tests/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265.os" @@ -0,0 +1,48 @@ +#использовать "../src/" +#Использовать asserts + +&Тест +Процедура ПроверитьПолучениеПараметровИзСоответствия() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(2); + + Соответствие = Новый Соответствие; + Соответствие.Вставить("Тест1", 1); + Соответствие.Вставить("Тест2", Массив); + + // Когда + + МенеджерПараметров = Новый МенеджерПараметров(); + + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровСоответствие(Соответствие)); + + МенеджерПараметров.Прочитать(); + + // Тогда + + Ожидаем.Что(МенеджерПараметров.Параметр("Тест1")).Равно(1); + Ожидаем.Что(МенеджерПараметров.Параметр("Тест2")[0]).Равно(2); + +КонецПроцедуры + +&Тест +Процедура ПроверитьОшибкуПриПередачиДругогоИсточника() Экспорт + + БылоИсключение = Ложь; + + Попытка + А = Новый ПровайдерПараметровСоответствие(Новый Массив); + Исключение + + БылоИсключение = Истина; + + Ожидаем.Что(ИнформацияОбОшибке().Описание) + .Содержит("Для провайдера параметров Соответствие, источником параметров может быть только соответствие"); + КонецПопытки; + + Ожидаем.Что(БылоИсключение).ЭтоИстина(); + +КонецПроцедуры