From 92ae199e66d641277684d972f29bf12797ad1fce Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Wed, 29 Apr 2026 01:03:35 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D0=B8=D0=BF=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=B9=D0=B4=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 46 +++++++- packagedef | 2 +- ...271\320\264\320\265\321\200\320\260ENV.os" | 32 ++++++ ...20\265\321\202\321\200\320\276\320\262.os" | 30 +++-- ...265\321\202\321\200\320\276\320\262ENV.os" | 61 ++++++++-- ...265\321\202\321\200\320\276\320\262INI.os" | 79 +++++++++++-- ...65\321\202\321\200\320\276\320\262JSON.os" | 84 ++++++++++++-- ...5\321\202\321\200\320\276\320\262VAULT.os" | 65 +++++++++-- ...65\321\202\321\200\320\276\320\262YAML.os" | 107 +++++++++++++----- ...21\201\321\202\320\262\320\270\320\265.os" | 73 +++++++++++- ...20\265\321\202\321\200\320\276\320\262.os" | 74 ++++++++++-- 11 files changed, 560 insertions(+), 93 deletions(-) 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\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os" diff --git a/docs/README.md b/docs/README.md index cac5f06..af5f262 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,10 +6,12 @@ - [Класс МенеджерПараметров:](#класс-менеджерпараметров) - [Параметр](#параметр) - [ЧтениеВыполнено](#чтениевыполнено) + - [ПрочитанныеПараметры](#прочитанныепараметры) - [Прочитать](#прочитать) - [УстановитьФайлПараметров](#установитьфайлпараметров) - [ДобавитьПровайдерПараметров](#добавитьпровайдерпараметров) - [ОтключитьПровайдер](#отключитьпровайдер) + - [ПровайдерПоИдентификатору](#провайдерпоидентификатору) - [НастройкаПоискаФайла](#настройкапоискафайла) - [ИспользоватьПровайдерJSON](#использоватьпровайдерjson) - [ИспользоватьПровайдерYAML](#использоватьпровайдерyaml) @@ -79,6 +81,16 @@ // ``` + +#### ПрочитанныеПараметры +```bsl +// Возвращает соответствие прочитанных параметров (сырой результат без обработки конструктором) +// +// Возвращаемое значение: +// Соответствие - прочитанные параметры +// +``` + #### Прочитать ```bsl @@ -102,9 +114,21 @@ // Добавляет в таблицу провайдеров произвольный класс-провайдер // // Параметры: -// КлассОбъект - Объект - класс провайдера или имя класса -// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 99) +// КлассОбъект - Объект - класс провайдера +// Приоритет - Число - числовой приоритет выполнения провайдера; +// меньшее значение читается первым (по умолчанию берётся из провайдера) +// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан — берётся из Идентификатор() провайдера; +// при коллизии автоматически добавляется суффикс #2, #3 и т.д. // +// Возвращаемое значение: +// Объект - переданный КлассОбъект (для цепочки настроек через .Настройки()) +// +``` + +Пример использования с цепочкой настроек: +```bsl +МП.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV, 2).Настройки() + .УстановитьПрефикс("APP_"); ``` @@ -117,6 +141,24 @@ // ``` + +#### ПровайдерПоИдентификатору +```bsl +// Возвращает класс провайдера по идентификатору для прямой настройки +// +// Параметры: +// ИдентификаторПровайдера - Строка - идентификатор провайдера (например, "json", "yaml#2") +// +// Возвращаемое значение: +// Произвольный - класс провайдера или Неопределено если не найден +// +``` + +Пример: +```bsl +МП.ПровайдерПоИдентификатору("env").Настройки().УстановитьПрефикс("APP_"); +``` + #### НастройкаПоискаФайла ```bsl diff --git a/packagedef b/packagedef index ac53ca7..8613d52 100644 --- a/packagedef +++ b/packagedef @@ -4,7 +4,7 @@ // Описание.Имя("configor") - .Версия("0.11.1") + .Версия("0.12.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\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.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\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os" new file mode 100644 index 0000000..c6d540c --- /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\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260ENV.os" @@ -0,0 +1,32 @@ + +Перем Префикс; // Строка - префикс фильтрации переменных среды + +#Область Публичное_API + +// Устанавливает префикс фильтрации переменных среды +// +// Параметры: +// ПрефиксФильтра - Строка - префикс +// +// Возвращаемое значение: +// НастройкиПровайдера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\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\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 35b8b40..169c7e0 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\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\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" @@ -12,12 +12,12 @@ // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) передаётся провайдеру как fallback // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(Знач НастройкиПровайдера = Неопределено) Экспорт Если Не Включен Тогда Возврат Новый Соответствие; @@ -52,6 +52,24 @@ Приоритет = НовыйПриоритет; КонецПроцедуры +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - новый идентификатор провайдера +// +Процедура УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + Идентификатор = НовыйИдентификатор; +КонецПроцедуры + +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// Произвольный - объект настроек или Неопределено если провайдер не поддерживает метод Настройки() +// +Функция Настройки() Экспорт + Возврат КлассПровайдера.Настройки(); +КонецФункции + // Выполняет запись данных провайдера // // Параметры: @@ -111,17 +129,11 @@ ИЛИ РеализованИнтерфейсЗаписи); Если НЕ ПроверкаПровайдера Тогда - // TODO: Добавить описание того что реализовано а что нет ВызватьИсключение "Не реализован необходимый интерфейс провайдера"; КонецЕсли; ТипПровайдера = ВходящийКлассПровайдера.ТипПровайдера(); - - Если ЭтоФайловыйПровайдер() Тогда - КлассПровайдера = Новый ФайловыйПровайдерПараметров(ВходящийКлассПровайдера); - Иначе - КлассПровайдера = ВходящийКлассПровайдера; - КонецЕсли; + КлассПровайдера = ВходящийКлассПровайдера; Приоритет = КлассПровайдера.Приоритет(); Идентификатор = КлассПровайдера.Идентификатор(); 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 89be6e5..561f7aa 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" @@ -3,8 +3,15 @@ Перем Лог; Перем Префикс; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиПровайдераENV + Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "") Префикс = ПрефиксПеременныхСреды; + _Приоритет = 2; + _Идентификатор = "env"; + _Настройки = Новый НастройкиПровайдераENV(ПрефиксПеременныхСреды); Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env"); КонецПроцедуры @@ -16,7 +23,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 2; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровENV - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -25,7 +45,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "env"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровENV - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -37,17 +70,29 @@ Возврат "env"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиПровайдераENV - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) игнорируется; для указания префикса +// использовать метод Настройки().УстановитьПрефикс(...) // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + ЭффективныйПрефикс = _Настройки.ПолучитьПрефикс(); - Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс); + Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", ЭффективныйПрефикс); ПеременныеСреды = ПеременныеСреды(); ПрочитанныеПараметры = Новый Соответствие; @@ -63,16 +108,16 @@ Результат = Новый Соответствие; - Если ПустаяСтрока(Префикс) Тогда + Если ПустаяСтрока(ЭффективныйПрефикс) Тогда Результат = ПрочитанныеПараметры; Иначе Для каждого ПеременнаяСреды Из ПрочитанныеПараметры Цикл - Если СтрНачинаетсяС(НРег(ПеременнаяСреды.Ключ), НРег(Префикс)) Тогда + Если СтрНачинаетсяС(НРег(ПеременнаяСреды.Ключ), НРег(ЭффективныйПрефикс)) Тогда Результат.Вставить( - Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - (СтрДлина(Префикс) + 1)), + Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - (СтрДлина(ЭффективныйПрефикс) + 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\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 3e14e84..7a03311 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" @@ -2,6 +2,10 @@ Перем Лог; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -10,7 +14,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровINI - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -19,7 +36,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "ini"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровINI - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -40,29 +70,52 @@ Возврат "ini"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + // Если вызван из ФайловыйПровайдерПараметров — читаем конкретный файл + Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда + + ПрочитанныеПараметры = Новый Соответствие; - ПрочитанныеПараметры = Новый Соответствие; + ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат ПрочитанныеПараметры; + КонецЕсли; - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); + ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); Возврат ПрочитанныеПараметры; КонецЕсли; - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) + И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда + ЭффективныеНастройки = НастройкиПровайдера; + КонецЕсли; - Возврат ПрочитанныеПараметры; + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); КонецФункции @@ -109,3 +162,7 @@ КонецФункции // Прочитать Лог = Логирование.ПолучитьЛог("oscript.lib.configor.ini"); + +_Приоритет = 1; +_Идентификатор = "ini"; +_Настройки = Новый НастройкиФайловогоПровайдера; 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\262JSON.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\262JSON.os" index 60287a3..6656d15 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\262JSON.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\262JSON.os" @@ -4,6 +4,10 @@ Перем Лог; Перем ПрефиксКлючаДляЧтенияВложенногоФайлаНастроек; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -12,7 +16,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровJSON - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -21,7 +38,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "json"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровJSON - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -36,35 +66,61 @@ // Возвращает расширения файлов по умолчанию // // Возвращаемое значение: -// Строка - расширения файлов по умолчанию (yaml yml) +// Строка - расширения файлов по умолчанию // Функция РасширенияФайлов() Экспорт Возврат "json"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы +// собственные настройки провайдера, используются они // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + // Если провайдер имеет собственные настройки и задан файл — используем свои настройки + // через ФайловыйПровайдерПараметров; иначе — используем входящие НастройкиПровайдера напрямую + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) + И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда + // Fallback: настройки переданы снаружи (обратная совместимость) + ЭффективныеНастройки = НастройкиПровайдера; + КонецЕсли; ПрочитанныеПараметры = Новый Соответствие; - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда + // Вызов из ФайловыйПровайдерПараметров — читаем конкретный файл + ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат ПрочитанныеПараметры; + КонецЕсли; + + Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); + ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); Возврат ПрочитанныеПараметры; КонецЕсли; - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); - - Возврат ПрочитанныеПараметры; + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); КонецФункции @@ -152,3 +208,7 @@ КонецПроцедуры Лог = Логирование.ПолучитьЛог("oscript.lib.configor.json"); + +_Приоритет = 1; +_Идентификатор = "json"; +_Настройки = Новый НастройкиФайловогоПровайдера; 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\262VAULT.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\262VAULT.os" index e30fb8f..98862be 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\262VAULT.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\262VAULT.os" @@ -4,6 +4,10 @@ Перем Лог; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиПровайдераVault + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -12,7 +16,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровVAULT - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -21,7 +38,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "vault"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровVAULT - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -33,21 +63,38 @@ Возврат "vault"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиПровайдераVault - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы +// собственные настройки провайдера, используются они // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(Знач НастройкиПровайдера = Неопределено) Экспорт ПрочитанныеПараметры = Новый Соответствие; - Адрес = НастройкиПровайдера.Адрес; - Токен = НастройкиПровайдера.Токен; - Запрос = НастройкиПровайдера.Запрос; + // Приоритет у собственных настроек + Н = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(Н.Адрес) Тогда + Н = НастройкиПровайдера; + КонецЕсли; + + Адрес = Н.Адрес; + Токен = Н.Токен; + Запрос = Н.Запрос; Если Не ЗначениеЗаполнено(Адрес) Тогда Лог.Отладка("Не указан адрес сервера. Чтение невозможно"); @@ -139,3 +186,7 @@ КонецФункции Лог = Логирование.ПолучитьЛог("oscript.lib.configor.vault"); + +_Приоритет = 1; +_Идентификатор = "vault"; +_Настройки = Новый НастройкиПровайдераVault; 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\262YAML.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\262YAML.os" index 79ba9aa..40e97f7 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\262YAML.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\262YAML.os" @@ -3,6 +3,10 @@ Перем Лог; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -11,7 +15,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровYAML - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -20,7 +37,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "yaml"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровYAML - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -41,46 +71,63 @@ Возврат "yaml yml"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы +// собственные настройки провайдера, используются они // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт - ПрочитанныеПараметры = Новый Соответствие; + // Если вызван из ФайловыйПровайдерПараметров — читаем конкретный файл + Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + ПрочитанныеПараметры = Новый Соответствие; - ПутьКФайлуПараметров = ФайлПараметров.ПолноеИмя; + ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + ПутьКФайлуПараметров = ФайлПараметров.ПолноеИмя; - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ПутьКФайлуПараметров); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - Попытка + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ПутьКФайлуПараметров); + Возврат ПрочитанныеПараметры; + КонецЕсли; - Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуПараметров); + Попытка + Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуПараметров); + ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуПараметров); + Лог.Отладка("Итоговые параметры:"); + ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры); + Исключение + Лог.Ошибка("Ошибка чтения настроек + |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; - ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуПараметров); - - Лог.Отладка("Итоговые параметры:"); - ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры); + Возврат ПрочитанныеПараметры; + КонецЕсли; - Исключение - - Лог.Ошибка("Ошибка чтения настроек - |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ВызватьИсключение; - - КонецПопытки; + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) + И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда + ЭффективныеНастройки = НастройкиПровайдера; + КонецЕсли; - Возврат ПрочитанныеПараметры; + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); КонецФункции @@ -136,4 +183,8 @@ #КонецОбласти -Лог = Логирование.ПолучитьЛог("oscript.lib.configor.yaml"); \ No newline at end of file +Лог = Логирование.ПолучитьЛог("oscript.lib.configor.yaml"); + +_Приоритет = 1; +_Идентификатор = "yaml"; +_Настройки = Новый НастройкиФайловогоПровайдера; \ No newline at end of file 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" index 6952324..824332b 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\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" @@ -3,7 +3,19 @@ Перем Лог; Перем мПараметры; -Процедура ПриСозданииОбъекта(Параметры) +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка + +Процедура ПриСозданииОбъекта(Параметры = Неопределено) + + _Приоритет = 3; + _Идентификатор = "map"; + Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map"); + + Если Параметры = Неопределено Тогда + мПараметры = Новый Соответствие; + Возврат; + КонецЕсли; Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда ВызватьИсключение @@ -11,7 +23,6 @@ КонецЕсли; мПараметры = Параметры; - Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map"); КонецПроцедуры @@ -23,7 +34,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 3; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -32,7 +56,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "map"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -44,15 +81,35 @@ Возврат "memory"; КонецФункции +// Устанавливает источник параметров +// +// Параметры: +// ИсточникПараметров - Соответствие - источник параметров +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьПараметры(Знач ИсточникПараметров) Экспорт + + Если ТипЗнч(ИсточникПараметров) <> Тип("Соответствие") Тогда + ВызватьИсключение + "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; + КонецЕсли; + + мПараметры = ИсточникПараметров; + Возврат ЭтотОбъект; + +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - игнорируется // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт Лог.Отладка("Считываю параметры из соответствия"); @@ -60,4 +117,8 @@ КонецФункции +Функция Настройки() Экспорт + Возврат Неопределено; +КонецФункции + #КонецОбласти 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 7ee8028..ae78f1a 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" @@ -14,8 +14,8 @@ Перем ПровайдерыПараметров; // Соответствие -Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера -Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault +Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера - для обратной совместимости +Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault - для обратной совместимости Перем ИнтерфейсПриемника; // Класс ИнтерфейсОбъекта @@ -130,11 +130,17 @@ // Добавляет в таблицу провайдеров произвольный класс-провайдер // // Параметры: -// КлассОбъект - Объект - класс провайдера или имя класса -// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 99) +// КлассОбъект - Объект - класс провайдера +// Приоритет - Число - числовой приоритет выполнения провайдера +// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан — берётся из Идентификатор() провайдера +// при коллизии добавляется суффикс #2, #3 и т.д. // -Процедура ДобавитьПровайдерПараметров(Знач КлассОбъект, - Знач Приоритет = Неопределено) Экспорт +// Возвращаемое значение: +// Объект - переданный КлассОбъект (для chaining настроек через Настройки()) +// +Функция ДобавитьПровайдерПараметров(Знач КлассОбъект, + Знач Приоритет = Неопределено, + Знач ИдентификаторПровайдера = Неопределено) Экспорт ДобавляемыйПровайдерПараметров = Новый ПровайдерПараметров(КлассОбъект); @@ -142,9 +148,18 @@ ДобавляемыйПровайдерПараметров.УстановитьПриоритет(Приоритет); КонецЕсли; - ПровайдерыПараметров.Вставить(ДобавляемыйПровайдерПараметров.Идентификатор, ДобавляемыйПровайдерПараметров); + Если ЗначениеЗаполнено(ИдентификаторПровайдера) Тогда + ДобавляемыйПровайдерПараметров.УстановитьИдентификатор(ИдентификаторПровайдера); + КонецЕсли; -КонецПроцедуры + ФинальныйИдентификатор = ПолучитьСвободныйИдентификатор(ДобавляемыйПровайдерПараметров.Идентификатор); + ДобавляемыйПровайдерПараметров.УстановитьИдентификатор(ФинальныйИдентификатор); + + ПровайдерыПараметров.Вставить(ФинальныйИдентификатор, ДобавляемыйПровайдерПараметров); + + Возврат КлассОбъект; + +КонецФункции // Отключает провайдера из таблицы провайдеров // @@ -164,6 +179,27 @@ КонецПроцедуры +// Возвращает класс-провайдер по идентификатору для прямой настройки +// +// Параметры: +// ИдентификаторПровайдера - Строка - идентификатор провайдера (например, "json", "yaml#2") +// +// Возвращаемое значение: +// Произвольный - класс провайдера или Неопределено если не найден +// +Функция ПровайдерПоИдентификатору(Знач ИдентификаторПровайдера) Экспорт + + Провайдер = ПровайдерыПараметров[ИдентификаторПровайдера]; + + Если Провайдер = Неопределено Тогда + Лог.Отладка("Провайдер с идентификатором <%1> не найден", ИдентификаторПровайдера); + Возврат Неопределено; + КонецЕсли; + + Возврат Провайдер; + +КонецФункции + // Возвращает объект настройки поиска файлов // // Возвращаемое значение: @@ -350,12 +386,14 @@ ИдентификаторПровайдера = КлассПровайдера.Идентификатор; + // Передаём глобальные настройки как fallback (обратная совместимость) + // Провайдер использует их только если у него нет собственных настроек Если КлассПровайдера.ЭтоФайловыйПровайдер() Тогда ПараметрыПровайдера = ПолучитьНастройкуФайловогоПровайдера().ПолучитьНастройки(); ИначеЕсли КлассПровайдера.ЭтоПровайдерVault() Тогда ПараметрыПровайдера = ПолучитьНастройкуПровайдераVault().ПолучитьНастройки(); Иначе - ПараметрыПровайдера = Новый Структура; + ПараметрыПровайдера = Неопределено; КонецЕсли; Попытка @@ -438,6 +476,24 @@ КонецПроцедуры +// Возвращает свободный идентификатор, добавляя суффикс #2, #3 при коллизии +Функция ПолучитьСвободныйИдентификатор(БазовыйИдентификатор) + + Если ПровайдерыПараметров[БазовыйИдентификатор] = Неопределено Тогда + Возврат БазовыйИдентификатор; + КонецЕсли; + + Счетчик = 2; + Пока Истина Цикл + Кандидат = БазовыйИдентификатор + "#" + Счетчик; + Если ПровайдерыПараметров[Кандидат] = Неопределено Тогда + Возврат Кандидат; + КонецЕсли; + Счетчик = Счетчик + 1; + КонецЦикла; + +КонецФункции + Функция ПолучитьНастройкуФайловогоПровайдера() Если НастройкаФайловогоПровайдера = Неопределено Тогда From 12aaab289d99c99cce71b4b8f340a379b014cf58 Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Tue, 5 May 2026 17:12:14 +0300 Subject: [PATCH 2/6] =?UTF-8?q?fix:=20=D0=BE=D1=82=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=BC=D0=B5=D1=87=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9=20review=20PR=20#49?= 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" | 45 ++++++++++++++++++ ...265\321\202\321\200\320\276\320\262ENV.os" | 2 - ...265\321\202\321\200\320\276\320\262INI.os" | 19 +------- ...65\321\202\321\200\320\276\320\262JSON.os" | 22 +-------- ...65\321\202\321\200\320\276\320\262YAML.os" | 46 ++++++++----------- ...21\201\321\202\320\262\320\270\320\265.os" | 29 +++++------- ...20\265\321\202\321\200\320\276\320\262.os" | 13 ++++-- ...20\265\321\202\321\200\320\276\320\262.os" | 2 +- 8 files changed, 88 insertions(+), 90 deletions(-) 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\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260\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\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260\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\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260\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..880c2d7 --- /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\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\260\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,45 @@ + +Перем мПараметры; // Соответствие + +#Область Публичное_API + +// Устанавливает источник параметров +// +// Параметры: +// ИсточникПараметров - Соответствие - источник параметров +// +// Возвращаемое значение: +// НастройкиПровайдераСоответствие - ссылка на текущий объект +// +Функция УстановитьПараметры(Знач ИсточникПараметров) Экспорт + + Если ТипЗнч(ИсточникПараметров) <> Тип("Соответствие") Тогда + ВызватьИсключение + "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; + КонецЕсли; + + мПараметры = ИсточникПараметров; + Возврат ЭтотОбъект; + +КонецФункции + +// Возвращает установленный источник параметров +// +// Возвращаемое значение: +// Соответствие - текущий источник параметров +// +Функция ПолучитьПараметры() Экспорт + Возврат мПараметры; +КонецФункции + +#КонецОбласти + +Процедура ПриСозданииОбъекта(НачальныеПараметры = Неопределено) + + Если НачальныеПараметры <> Неопределено Тогда + УстановитьПараметры(НачальныеПараметры); + Иначе + мПараметры = Новый Соответствие; + КонецЕсли; + +КонецПроцедуры 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 561f7aa..35339b7 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,14 +1,12 @@ #Использовать logos Перем Лог; -Перем Префикс; Перем _Приоритет; // Число Перем _Идентификатор; // Строка Перем _Настройки; // НастройкиПровайдераENV Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "") - Префикс = ПрефиксПеременныхСреды; _Приоритет = 2; _Идентификатор = "env"; _Настройки = Новый НастройкиПровайдера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 7a03311..fd00415 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" @@ -89,23 +89,6 @@ // Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт - // Если вызван из ФайловыйПровайдерПараметров — читаем конкретный файл - Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда - - ПрочитанныеПараметры = Новый Соответствие; - - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); - Возврат ПрочитанныеПараметры; - КонецЕсли; - // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); Если НастройкиПровайдера <> Неопределено @@ -128,7 +111,7 @@ // Возвращаемое значение: // Соответствие - итоговые параметры // -Функция Прочитать(Знач ПутьКФайлу) +Функция Прочитать(Знач ПутьКфайлу) Экспорт НастройкиИзФайла = Новый Соответствие; 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\262JSON.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\262JSON.os" index 6656d15..4c1fdd4 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\262JSON.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\262JSON.os" @@ -92,8 +92,7 @@ // Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт - // Если провайдер имеет собственные настройки и задан файл — используем свои настройки - // через ФайловыйПровайдерПараметров; иначе — используем входящие НастройкиПровайдера напрямую + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); Если НастройкиПровайдера <> Неопределено И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) @@ -102,23 +101,6 @@ ЭффективныеНастройки = НастройкиПровайдера; КонецЕсли; - ПрочитанныеПараметры = Новый Соответствие; - - Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда - // Вызов из ФайловыйПровайдерПараметров — читаем конкретный файл - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); @@ -133,7 +115,7 @@ // Возвращаемое значение: // Соответствие - итоговые параметры // -Функция Прочитать(Знач ПутьКФайлуНастройки) +Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт НастройкиИзФайла = Новый Соответствие; 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\262YAML.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\262YAML.os" index 40e97f7..a91a03e 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\262YAML.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\262YAML.os" @@ -91,33 +91,6 @@ // Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт - // Если вызван из ФайловыйПровайдерПараметров — читаем конкретный файл - Если НастройкиПровайдера <> Неопределено И НастройкиПровайдера.Свойство("ФайлПараметров") Тогда - - ПрочитанныеПараметры = Новый Соответствие; - - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - ПутьКФайлуПараметров = ФайлПараметров.ПолноеИмя; - - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ПутьКФайлуПараметров); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - Попытка - Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуПараметров); - ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуПараметров); - Лог.Отладка("Итоговые параметры:"); - ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры); - Исключение - Лог.Ошибка("Ошибка чтения настроек - |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - - Возврат ПрочитанныеПараметры; - КонецЕсли; - // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); Если НастройкиПровайдера <> Неопределено @@ -135,6 +108,25 @@ #Область Вспомогательные_процедуры_и_функции +Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт + + ПрочитанныеПараметры = Новый Соответствие; + + Попытка + Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуНастройки); + ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуНастройки); + Лог.Отладка("Итоговые параметры:"); + ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры); + Исключение + Лог.Ошибка("Ошибка чтения настроек + |%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\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" index 824332b..e04b711 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\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" @@ -1,10 +1,10 @@ #Использовать logos Перем Лог; -Перем мПараметры; Перем _Приоритет; // Число Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиПровайдераСоответствие Процедура ПриСозданииОбъекта(Параметры = Неопределено) @@ -13,16 +13,16 @@ Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map"); Если Параметры = Неопределено Тогда - мПараметры = Новый Соответствие; - Возврат; - КонецЕсли; + _Настройки = Новый НастройкиПровайдераСоответствие; + Иначе - Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда - ВызватьИсключение - "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; - КонецЕсли; + Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда + ВызватьИсключение + "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; + КонецЕсли; - мПараметры = Параметры; + _Настройки = Новый НастройкиПровайдераСоответствие(Параметры); + КонецЕсли; КонецПроцедуры @@ -91,12 +91,7 @@ // Функция УстановитьПараметры(Знач ИсточникПараметров) Экспорт - Если ТипЗнч(ИсточникПараметров) <> Тип("Соответствие") Тогда - ВызватьИсключение - "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; - КонецЕсли; - - мПараметры = ИсточникПараметров; + _Настройки.УстановитьПараметры(ИсточникПараметров); Возврат ЭтотОбъект; КонецФункции @@ -113,12 +108,12 @@ Лог.Отладка("Считываю параметры из соответствия"); - Возврат мПараметры; + Возврат _Настройки.ПолучитьПараметры(); КонецФункции Функция Настройки() Экспорт - Возврат Неопределено; + Возврат _Настройки; КонецФункции #КонецОбласти 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 7d0e690..7a68ec1 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" @@ -242,13 +242,16 @@ КонецПроцедуры Функция ВыполнитьЧтениеПровайдера(Знач ИмяФайлаПараметров) - - НастройкаПровайдераДляТекущегоЧтения = СкопироватьСтруктуру(НастройкиПровайдера); - НастройкаПровайдераДляТекущегоЧтения.Вставить("ФайлПараметров", ИмяФайлаПараметров); - РезультатЧтенияФайла = КлассПровайдера.ПрочитатьПараметры(НастройкаПровайдераДляТекущегоЧтения); + ФайлПараметров = Новый Файл(ИмяФайлаПараметров); + + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат Новый Соответствие; + КонецЕсли; - Возврат РезультатЧтенияФайла; + Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат КлассПровайдера.Прочитать(ИмяФайлаПараметров); КонецФункции 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 ae78f1a..07f50a6 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" @@ -157,7 +157,7 @@ ПровайдерыПараметров.Вставить(ФинальныйИдентификатор, ДобавляемыйПровайдерПараметров); - Возврат КлассОбъект; + Возврат ДобавляемыйПровайдерПараметров; КонецФункции From f2f0e487cd177b96ff231a46b8b14d36ec62328e Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Tue, 5 May 2026 17:33:08 +0300 Subject: [PATCH 3/6] =?UTF-8?q?test:=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D0=B8-?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D0=B2=D0=B0=D0=B9=D0=B4=D0=B5=D1=80=D0=BE?= =?UTF-8?q?=D0=B2,=20fluent-API=20=D0=B8=20=D0=BF=D1=80=D1=8F=D0=BC=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\320\271\320\264\320\265\321\200_test.os" | 200 ++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 "tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" diff --git "a/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" "b/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" new file mode 100644 index 0000000..f813eb3 --- /dev/null +++ "b/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" @@ -0,0 +1,200 @@ +#использовать "../src/" +#Использовать asserts +#Использовать tempfiles + +// Тесты на регистрацию нескольких провайдеров одного типа, +// доступ по идентификатору и fluent-настройку каждого независимо. + +&Тест +Процедура ТестДолжен_ДобавитьДваJSONПровайдераИПрочитать() Экспорт + + // Дано: два разных JSON-файла + Файл1 = СоздатьВременныйJSON("{""key1"": ""value1""}"); + Файл2 = СоздатьВременныйJSON("{""key2"": ""value2""}"); + + // Когда + МенеджерПараметров = Новый МенеджерПараметров(); + + Провайдер1 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON()); + Провайдер1.Настройки().УстановитьФайлПараметров(Файл1); + + Провайдер2 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON()); + Провайдер2.Настройки().УстановитьФайлПараметров(Файл2); + + МенеджерПараметров.Прочитать(); + + // Тогда + Ожидаем.Что(МенеджерПараметров.Параметр("key1")).Равно("value1"); + Ожидаем.Что(МенеджерПараметров.Параметр("key2")).Равно("value2"); + + ВременныеФайлы.Удалить(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_АвтоматическиНазначитьСуффиксДляВторогоПровайдера() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + + // Когда + Провайдер1 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON()); + Провайдер2 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON()); + Провайдер3 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON()); + + // Тогда — идентификаторы уникальны + Ожидаем.Что(Провайдер1.Идентификатор).Равно("json"); + Ожидаем.Что(Провайдер2.Идентификатор).Равно("json#2"); + Ожидаем.Что(Провайдер3.Идентификатор).Равно("json#3"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_НайтиПровайдерПоИдентификатору() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON()); + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON()); + + // Когда + ПровайдерJSON = МенеджерПараметров.ПровайдерПоИдентификатору("json"); + ПровайдерJSON2 = МенеджерПараметров.ПровайдерПоИдентификатору("json#2"); + НеСуществует = МенеджерПараметров.ПровайдерПоИдентификатору("нет_такого"); + + // Тогда + Ожидаем.Что(ПровайдерJSON <> Неопределено).ЭтоИстина(); + Ожидаем.Что(ПровайдерJSON2 <> Неопределено).ЭтоИстина(); + Ожидаем.Что(НеСуществует).ЭтоНеопределено(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ДобавитьПровайдерСЯвнымИдентификатором() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + + // Когда + Провайдер = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON(), Неопределено, "основной"); + + // Тогда + Ожидаем.Что(Провайдер.Идентификатор).Равно("основной"); + Ожидаем.Что(МенеджерПараметров.ПровайдерПоИдентификатору("основной") <> Неопределено).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_НастроитьПровайдерСоответствиеЧерезFluent() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + + Соответствие1 = Новый Соответствие; + Соответствие1.Вставить("ключ1", "знач1"); + + Соответствие2 = Новый Соответствие; + Соответствие2.Вставить("ключ2", "знач2"); + + // Когда — два провайдера Соответствие, каждый с независимыми данными + Провайдер1 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровСоответствие()); + Провайдер1.Настройки().УстановитьПараметры(Соответствие1); + + Провайдер2 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровСоответствие()); + Провайдер2.Настройки().УстановитьПараметры(Соответствие2); + + МенеджерПараметров.Прочитать(); + + // Тогда + Ожидаем.Что(МенеджерПараметров.Параметр("ключ1")).Равно("знач1"); + Ожидаем.Что(МенеджерПараметров.Параметр("ключ2")).Равно("знач2"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_НастроитьПрефиксENVЧерезFluent() Экспорт + + // Дано + УстановитьПеременнуюСреды("APP_PARAM_NAME", "ТестЗначение", РасположениеПеременнойСреды.Процесс); + + МенеджерПараметров = Новый МенеджерПараметров(); + + // Когда + Провайдер = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV()); + Провайдер.Настройки().УстановитьПрефикс("APP"); + + МенеджерПараметров.Прочитать(); + + // Тогда + Ожидаем.Что(МенеджерПараметров.Параметр("Param.Name")).Равно("ТестЗначение"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ВернутьПравильныйТипИзНастроекПровайдеровJSON_INI_YAML() Экспорт + + // НастройкиФайловогоПровайдера должны возвращаться у JSON / INI / YAML + ПровайдерJSON = Новый ПровайдерПараметровJSON(); + ПровайдерINI = Новый ПровайдерПараметровINI(); + ПровайдерYAML = Новый ПровайдерПараметровYAML(); + + Ожидаем.Что(ПровайдерJSON.Настройки() <> Неопределено).ЭтоИстина(); + Ожидаем.Что(ПровайдерINI.Настройки() <> Неопределено).ЭтоИстина(); + Ожидаем.Что(ПровайдерYAML.Настройки() <> Неопределено).ЭтоИстина(); + + // НастройкиПровайдераСоответствие у провайдера Соответствие + ПровайдерМап = Новый ПровайдерПараметровСоответствие(); + Ожидаем.Что(ПровайдерМап.Настройки() <> Неопределено).ЭтоИстина(); + + // НастройкиПровайдераENV у ENVпровайдера + ПровайдерENV = Новый ПровайдерПараметровENV(); + Ожидаем.Что(ПровайдерENV.Настройки() <> Неопределено).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПрочитатьJSONФайлНапрямую() Экспорт + + // Дано + Файл = СоздатьВременныйJSON("{""direct"": ""result""}"); + + // Когда — вызов Прочитать() напрямую на провайдере (теперь Экспорт) + Провайдер = Новый ПровайдерПараметровJSON(); + Результат = Провайдер.Прочитать(Файл); + + // Тогда + Ожидаем.Что(Результат["direct"]).Равно("result"); + + ВременныеФайлы.Удалить(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_ПрочитатьINIФайлНапрямую() Экспорт + + // Дано + Файл = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-config.ini"); + + // Когда + Провайдер = Новый ПровайдерПараметровINI(); + Результат = Провайдер.Прочитать(Файл); + + // Тогда + Ожидаем.Что(Результат["owner.contact.email"]).Равно("mail.ru"); + +КонецПроцедуры + +// Вспомогательные + +Функция СоздатьВременныйJSON(Знач ТекстJSON) + + ПутьКФайлу = ВременныеФайлы.НовоеИмяФайла("json"); + + Запись = Новый ЗаписьТекста; + Запись.Открыть(ПутьКФайлу); + Запись.ЗаписатьСтроку(ТекстJSON); + Запись.Закрыть(); + + Возврат ПутьКФайлу; + +КонецФункции From 274d08c41cb48dd52c2f2d813f281bb4aca40dcc Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Wed, 27 May 2026 12:10:48 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=B8=D0=BB=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BE=D0=B1=D1=80=D0=B0=D1=82=D0=BD=D1=83=D1=8E=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D0=BC=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/build.feature | 1 + features/step_definitions/yaml-provider.os | 16 ++- ...20\265\321\202\321\200\320\276\320\262.os" | 101 +----------------- ...0\320\276\320\271\320\272\320\270_test.os" | 16 +-- ...5\321\202\321\200\320\276\320\262_test.os" | 73 +++++++------ ...265\321\202\321\200\320\276\320\262INI.os" | 6 +- ...5\321\202\321\200\320\276\320\262VAULT.os" | 8 +- 7 files changed, 78 insertions(+), 143 deletions(-) diff --git a/features/build.feature b/features/build.feature index d9ad370..789e22e 100644 --- a/features/build.feature +++ b/features/build.feature @@ -8,6 +8,7 @@ Контекст: Отключение отладки в логах Допустим Я выключаю отладку лога с именем "oscript.lib.configor" И Я очищаю параметры команды "opm" в контексте + И Я устанавливаю кодировку вывода "utf-8" команды "opm" Сценарий: Выполнение команды без параметров Когда Я добавляю параметр "build ." для команды "opm" diff --git a/features/step_definitions/yaml-provider.os b/features/step_definitions/yaml-provider.os index 0bdbe8d..7ff88b2 100644 --- a/features/step_definitions/yaml-provider.os +++ b/features/step_definitions/yaml-provider.os @@ -45,7 +45,21 @@ Процедура ЯУстанавливаюАвтонастройкиСПараметрами(Знач ТаблицаПараметров) Экспорт МенеджерПараметров = БДД.ПолучитьИзКонтекста("МенеджерПараметров"); - МенеджерПараметров.АвтоНастройка(ТаблицаПараметров[0][0], ТаблицаПараметров[1][0], ТаблицаПараметров[2][0]); + ИмяФайла = ТаблицаПараметров[0][0]; + ВложенныйКаталог = ТаблицаПараметров[1][0]; + ФорматФайла = ТаблицаПараметров[2][0]; + + Если НРег(ФорматФайла) = "yaml" Тогда + Провайдер = Новый ПровайдерПараметровYAML; + Иначе + Провайдер = Новый ПровайдерПараметровJSON; + КонецЕсли; + + МенеджерПараметров + .ДобавитьПровайдерПараметров(Провайдер, 0) + .Настройки() + .УстановитьИмяФайла(ИмяФайла) + .УстановитьСтандартныеКаталогиПоиска(ВложенныйКаталог); КонецПроцедуры 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 07f50a6..c173501 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" @@ -14,9 +14,6 @@ Перем ПровайдерыПараметров; // Соответствие -Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера - для обратной совместимости -Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault - для обратной совместимости - Перем ИнтерфейсПриемника; // Класс ИнтерфейсОбъекта Перем ВнутреннийКонструкторПараметров; // Класс КонструкторПараметров @@ -100,33 +97,6 @@ КонецПроцедуры -// Устанавливает путь к файлу параметров -// -// Параметры: -// ПутьКФайлу - Строка - полный путь к файлу параметров -// -Процедура УстановитьФайлПараметров(Знач ПутьКФайлу) Экспорт - - НастройкаФайловогоПровайдера = ПолучитьНастройкуФайловогоПровайдера(); - - НастройкаФайловогоПровайдера.УстановитьФайлПараметров(ПутьКФайлу); - -КонецПроцедуры - -// Устанавливает настройки провайдера параметров -// -// Параметры: -// Настройки - Структура - настройки провайдера -// -Процедура УстановитьНастройкиVault(Знач Настройки) Экспорт - - НастройкаПровайдераVault = ПолучитьНастройкуПровайдераVault(); - - НастройкаПровайдераVault.УстановитьАдрес(Настройки.Адрес) - .УстановитьТокен(Настройки.Токен) - .УстановитьЗапрос(Настройки.Запрос); -КонецПроцедуры - // Добавляет в таблицу провайдеров произвольный класс-провайдер // // Параметры: @@ -200,15 +170,6 @@ КонецФункции -// Возвращает объект настройки поиска файлов -// -// Возвращаемое значение: -// Объект.НастройкаФайловогоПровайдера - внутренний класс по настройке файловых провайдеров -// -Функция НастройкаПоискаФайла() Экспорт - Возврат ПолучитьНастройкуФайловогоПровайдера(); -КонецФункции - // Добавляет и включает встроенный провайдер JSON // // Параметры: @@ -242,36 +203,6 @@ КонецПроцедуры -// Производит автоматическую настройку провайдеров -// -// Параметры: -// НаименованиеФайла - Строка - Наименование файла параметров -// ВложенныйПодкаталог - Строка - Дополнительный каталог, для стандартных путей -// ИдентификаторыПровайдеров - Строка - Идентификаторы встроенных параметров, по умолчанию -// -Процедура АвтоНастройка(Знач НаименованиеФайла, - Знач ВложенныйПодкаталог = Неопределено, - Знач ИдентификаторыПровайдеров = "yaml json") Экспорт - - НастройкаФайловогоПровайдера = ПолучитьНастройкуФайловогоПровайдера(); - - НастройкаФайловогоПровайдера.УстановитьИмяФайла(НаименованиеФайла); - НастройкаФайловогоПровайдера.УстановитьСтандартныеКаталогиПоиска(ВложенныйПодкаталог); - - МассивИдентификаторовПровайдеров = СтрРазделить(Врег(ИдентификаторыПровайдеров), " "); - - ПровайдерYAML = МассивИдентификаторовПровайдеров.Найти("YAML"); - Если НЕ ПровайдерYAML = Неопределено Тогда - ИспользоватьПровайдерYAML(ПровайдерYAML); - КонецЕсли; - - ПровайдерJSON = МассивИдентификаторовПровайдеров.Найти("JSON"); - Если НЕ ПровайдерJSON = Неопределено Тогда - ИспользоватьПровайдерJSON(ПровайдерJSON); - КонецЕсли; - -КонецПроцедуры - // Устанавливает класс параметров для описания конструктора параметров и установки результатов чтения // // Параметры: @@ -386,18 +317,8 @@ ИдентификаторПровайдера = КлассПровайдера.Идентификатор; - // Передаём глобальные настройки как fallback (обратная совместимость) - // Провайдер использует их только если у него нет собственных настроек - Если КлассПровайдера.ЭтоФайловыйПровайдер() Тогда - ПараметрыПровайдера = ПолучитьНастройкуФайловогоПровайдера().ПолучитьНастройки(); - ИначеЕсли КлассПровайдера.ЭтоПровайдерVault() Тогда - ПараметрыПровайдера = ПолучитьНастройкуПровайдераVault().ПолучитьНастройки(); - Иначе - ПараметрыПровайдера = Неопределено; - КонецЕсли; - Попытка - ПрочитанныеПараметрыПровайдера = КлассПровайдера.ПрочитатьПараметры(ПараметрыПровайдера); + ПрочитанныеПараметрыПровайдера = КлассПровайдера.ПрочитатьПараметры(); Исключение Лог.КритичнаяОшибка("Не удалось прочитать параметры используя провайдер <%1>. По причине: %2", ИдентификаторПровайдера, @@ -494,26 +415,6 @@ КонецФункции -Функция ПолучитьНастройкуФайловогоПровайдера() - - Если НастройкаФайловогоПровайдера = Неопределено Тогда - НастройкаФайловогоПровайдера = Новый НастройкиФайловогоПровайдера; - КонецЕсли; - - Возврат НастройкаФайловогоПровайдера; - -КонецФункции - -Функция ПолучитьНастройкуПровайдераVault() - - Если НастройкаПровайдераVault = Неопределено Тогда - НастройкаПровайдераVault = Новый НастройкиПровайдераVault; - КонецЕсли; - - Возврат НастройкаПровайдераVault; - -КонецФункции - #КонецОбласти #Область Инициализация 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 f3955cb..b5c4824 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" @@ -93,9 +93,11 @@ ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение)); - МенеджерПараметров.АвтоНастройка(ТестовоеИмя); - НастройкаПоискаФайла = МенеджерПараметров.НастройкаПоискаФайла(); - НастройкаПоискаФайла.ДобавитьКаталогПоиска(ВременныйКаталог); + МенеджерПараметров + .ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON, 0) + .Настройки() + .УстановитьИмяФайла(ТестовоеИмя) + .ДобавитьКаталогПоиска(ВременныйКаталог); МенеджерПараметров.Прочитать(); ПроверитьРезультат(СтруктураПараметров.version, МенеджерПараметров.Параметр("Версия")); @@ -183,9 +185,11 @@ Конструктор.ПолеСтрока("Поле") .ПроизвольныеПоля(); - МенеджерПараметров.АвтоНастройка(ТестовоеИмя); - НастройкаПоискаФайла = МенеджерПараметров.НастройкаПоискаФайла(); - НастройкаПоискаФайла.ДобавитьКаталогПоиска(ВременныйКаталог); + МенеджерПараметров + .ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON, 0) + .Настройки() + .УстановитьИмяФайла(ТестовоеИмя) + .ДобавитьКаталогПоиска(ВременныйКаталог); МенеджерПараметров.Прочитать(); ПроверитьРезультат(СтруктураПараметров["--custom-feild"], МенеджерПараметров.Параметр("--custom-feild")); 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 17f889e..bbea87e 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" @@ -33,13 +33,14 @@ | ] |}", "values.0.import values.1.test", "тестмассива0 тестмассива1")); - МенеджерПараметров = Новый МенеджерПараметров; - Для каждого Тест Из ТестовыеСлучаи Цикл + МенеджерПараметров = Новый МенеджерПараметров; ТестовыйФайл = ПодготовитьТестовыйФайл(Тест.ТекстФайлаПроверки); - МенеджерПараметров.АвтоНастройка("config"); - МенеджерПараметров.УстановитьФайлПараметров(ТестовыйФайл); + МенеджерПараметров + .ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON, 0) + .Настройки() + .УстановитьФайлПараметров(ТестовыйФайл); МенеджерПараметров.Прочитать(); Для ИндексПараметра = 0 По Тест.ИменаПараметров.ВГраница() Цикл @@ -84,8 +85,10 @@ КлассПараметров = ПодготовитьТестовыйКласс(); ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки); - МенеджерПараметров.АвтоНастройка("config"); - МенеджерПараметров.УстановитьФайлПараметров(ТестовыйФайл); + МенеджерПараметров + .ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON, 0) + .Настройки() + .УстановитьФайлПараметров(ТестовыйФайл); МенеджерПараметров.КонструкторПараметров(КлассПараметров); МенеджерПараметров.Прочитать(); @@ -132,9 +135,11 @@ ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение)); - МенеджерПараметров.АвтоНастройка(ТестовоеИмя); - НастройкаПоискаФайла = МенеджерПараметров.НастройкаПоискаФайла(); - НастройкаПоискаФайла.ДобавитьКаталогПоиска(ВременныйКаталог); + МенеджерПараметров + .ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON, 0) + .Настройки() + .УстановитьИмяФайла(ТестовоеИмя) + .ДобавитьКаталогПоиска(ВременныйКаталог); МенеджерПараметров.Прочитать(); Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрМассив[0], МенеджерПараметров.Параметр("ПараметрМассив.0"), "Результат должен совпадать с ожиданиями."); @@ -179,44 +184,48 @@ КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение)); - МенеджерПараметров.АвтоНастройка(ТестовоеИмя); + МенеджерПараметров + .ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON, 0) + .Настройки() + .УстановитьИмяФайла(ТестовоеИмя) + .ДобавитьКаталогПоиска(ВременныйКаталог); - СтруктураПараметров = Новый Структура("version, ПараметрСтрока, ПараметрЧисло, ПараметрМассив, ПараметрСтруктура, ПараметрСоответствие", - "1.0", - "ПростоСтрока", - 10, + // Второй файл: config2.json + ТестовоеИмя2 = "config2"; + + СтруктураПараметров2 = Новый Структура("ПараметрМассив, ПараметрСтруктура, ПараметрСоответствие", ПолучитьНовыйМассив("Элемент3"), - Новый Структура("Строка, Число, Массив, Структура, Соответствие", - "ПростоСтрока", - 10, + Новый Структура("Массив, Соответствие", ПолучитьНовыйМассив("Элемент3"), - Новый Структура("Строка, Строка2", "ЗначениеСтруктуры", "ЗначениеСтруктуры2"), ПолучитьСоответствие("КлючВнутри1, КлючВнутри2", "Значение1, Значение2") - ), + ), ПолучитьСоответствие("Ключ1, Ключ2", "Значение1, Значение2") ); - ЗаписьJSON = Новый ЗаписьJSON(); - ЗаписьJSON.УстановитьСтроку(); - ЗаписатьJSON(ЗаписьJSON, СтруктураПараметров); - ТекстФайлаПроверки = ЗаписьJSON.Закрыть(); - - ТестовыйФайл = ПодготовитьТестовыйФайл(ТекстФайлаПроверки); + ЗаписьJSON2 = Новый ЗаписьJSON(); + ЗаписьJSON2.УстановитьСтроку(); + ЗаписатьJSON(ЗаписьJSON2, СтруктураПараметров2); + ТестовыйФайл2 = ВременныеФайлы.НовоеИмяФайла("json"); + ЗаписьТекста2 = Новый ЗаписьТекста; + ЗаписьТекста2.Открыть(ТестовыйФайл2); + ЗаписьТекста2.ЗаписатьСтроку(ЗаписьJSON2.Закрыть()); + ЗаписьТекста2.Закрыть(); - ТестовоеИмя = "config2"; - ТестовоеРасширение = ".json"; - - КопироватьФайл(ТестовыйФайл, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя + ТестовоеРасширение)); + КопироватьФайл(ТестовыйФайл2, ОбъединитьПути(ВременныйКаталог, ТестовоеИмя2 + ТестовоеРасширение)); - МенеджерПараметров.АвтоНастройка(ТестовоеИмя); + МенеджерПараметров + .ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON, 1) + .Настройки() + .УстановитьИмяФайла(ТестовоеИмя2) + .ДобавитьКаталогПоиска(ВременныйКаталог); - НастройкаПоискаФайла = МенеджерПараметров.НастройкаПоискаФайла(); - НастройкаПоискаФайла.УстановитьСтандартныеКаталогиПоиска(ВременныйКаталог); МенеджерПараметров.Прочитать(); + // Первый провайдер (config.json) даёт Элемент1, Элемент2; второй (config2.json) — Элемент3 Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрМассив[0], МенеджерПараметров.Параметр("ПараметрМассив.0"), "Результат должен совпадать с ожиданиями."); Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрСтруктура.Массив[0], МенеджерПараметров.Параметр("ПараметрСтруктура.Массив.0"), "Результат должен совпадать с ожиданиями."); Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрСтруктура.Соответствие["КлючВнутри1"], МенеджерПараметров.Параметр("ПараметрСтруктура.Соответствие.КлючВнутри1"), "Результат должен совпадать с ожиданиями."); + Утверждения.ПроверитьРавенство(СтруктураПараметров2.ПараметрМассив[0], МенеджерПараметров.Параметр("ПараметрМассив.2"), "Элемент3 из второго провайдера должен быть добавлен в массив."); ВременныеФайлы.Удалить(); 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" index f27d3f0..94fc0ac 100644 --- "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" @@ -7,8 +7,10 @@ // Дано МенеджерПараметров = Новый МенеджерПараметров(); - МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровINI()); - МенеджерПараметров.УстановитьФайлПараметров(ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-config.ini")); + МенеджерПараметров + .ДобавитьПровайдерПараметров(Новый ПровайдерПараметровINI()) + .Настройки() + .УстановитьФайлПараметров(ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-config.ini")); МенеджерПараметров.Прочитать(); // Когда 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\262VAULT.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\262VAULT.os" index eede260..1e38842 100644 --- "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\262VAULT.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\262VAULT.os" @@ -42,8 +42,12 @@ // Дано МенеджерПараметров = Новый МенеджерПараметров(); - МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровVAULT()); - МенеджерПараметров.УстановитьНастройкиVault(НастройкиVault); + МенеджерПараметров + .ДобавитьПровайдерПараметров(Новый ПровайдерПараметровVAULT()) + .Настройки() + .УстановитьАдрес(НастройкиVault.Адрес) + .УстановитьТокен(НастройкиVault.Токен) + .УстановитьЗапрос(НастройкиVault.Запрос); // Когда МенеджерПараметров.Прочитать(); From 108fc6f2d2aeee84b0d97276ee7abf56be6ba973 Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Mon, 8 Jun 2026 12:41:06 +0300 Subject: [PATCH 5/6] =?UTF-8?q?=D0=9F=D0=BE=D1=83=D0=B4=D0=B0=D0=BB=D1=8F?= =?UTF-8?q?=D0=BB=20=D1=80=D1=83=D0=B4=D0=B8=D0=BC=D0=B5=D0=BD=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 2 +- ...20\260\320\271\320\264\320\265\321\200.os" | 192 ++++++++++++++++++ ...265\321\202\321\200\320\276\320\262INI.os" | 55 +++++ ...65\321\202\321\200\320\276\320\262JSON.os" | 34 ++++ ...65\321\202\321\200\320\276\320\262YAML.os" | 32 +++ ...20\265\321\202\321\200\320\276\320\262.os" | 9 +- ...265\321\202\321\200\320\276\320\262ENV.os" | 7 +- ...265\321\202\321\200\320\276\320\262INI.os" | 93 +++------ ...65\321\202\321\200\320\276\320\262JSON.os" | 132 ++---------- ...5\321\202\321\200\320\276\320\262VAULT.os" | 11 +- ...65\321\202\321\200\320\276\320\262YAML.os" | 126 +++--------- ...21\201\321\202\320\262\320\270\320\265.os" | 5 +- ...20\265\321\202\321\200\320\276\320\262.os" | 21 +- ...20\265\321\202\321\200\320\276\320\262.os" | 2 +- ...5\321\202\321\200\320\276\320\262_test.os" | 2 +- ...0\320\271\320\264\320\265\321\200_test.os" | 6 +- 16 files changed, 395 insertions(+), 334 deletions(-) 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\221\320\260\320\267\320\276\320\262\321\213\320\271\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.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\320\260\321\200\321\201\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 "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\320\260\321\200\321\201\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.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\320\260\321\200\321\201\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os" diff --git a/docs/README.md b/docs/README.md index af5f262..f0bfd63 100644 --- a/docs/README.md +++ b/docs/README.md @@ -117,7 +117,7 @@ // КлассОбъект - Объект - класс провайдера // Приоритет - Число - числовой приоритет выполнения провайдера; // меньшее значение читается первым (по умолчанию берётся из провайдера) -// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан — берётся из Идентификатор() провайдера; +// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан - берётся из Идентификатор() провайдера; // при коллизии автоматически добавляется суффикс #2, #3 и т.д. // // Возвращаемое значение: 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\221\320\260\320\267\320\276\320\262\321\213\320\271\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.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\221\320\260\320\267\320\276\320\262\321\213\320\271\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.os" new file mode 100644 index 0000000..22772c5 --- /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\221\320\260\320\267\320\276\320\262\321\213\320\271\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.os" @@ -0,0 +1,192 @@ +// Базовая реализация файлового провайдера параметров. +// Содержит общую механику (поверхность провайдера, чтение/разбор файла), +// а формат-специфичная логика инкапсулирована в объекте-парсере. +// +// Контракт парсера: +// * РасширенияФайлов() - Строка - поддерживаемые расширения (через пробел) +// * РазобратьТекст(Текст) - Соответствие - разбор содержимого файла + +#Использовать logos + +Перем Лог; + +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера +Перем _Парсер; // Объект-парсер формата + +#Область ПрограммныйИнтерфейс + +// Возвращает приоритет провайдера +// +// Возвращаемое значение: +// Число - текущий приоритет провайдера +// +Функция Приоритет() Экспорт + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.БазовыйФайловыйПровайдер - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; +КонецФункции + +// Возвращает идентификатор провайдера +// +// Возвращаемое значение: +// Строка - текущий идентификатор провайдера +// +Функция Идентификатор() Экспорт + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.БазовыйФайловыйПровайдер - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; +КонецФункции + +// Возвращает тип провайдера +// +// Возвращаемое значение: +// Строка - текущий тип провайдера +// +Функция ТипПровайдера() Экспорт + Возврат "file"; +КонецФункции + +// Возвращает расширения файлов по умолчанию (из парсера) +// +// Возвращаемое значение: +// Строка - расширения файлов +// +Функция РасширенияФайлов() Экспорт + Возврат _Парсер.РасширенияФайлов(); +КонецФункции + +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + +// Выполняет чтение параметров для провайдера +// +// Возвращаемое значение: +// Соответствие - результат чтения провайдера +// +Функция ПрочитатьПараметры() Экспорт + + // Делегируем поиск и чтение файлов в ФайловыйПровайдерПараметров + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); + +КонецФункции + +// Выполняет чтение и разбор одного файла параметров +// +// Параметры: +// ПутьКФайлуНастройки - Строка - путь к файлу параметров +// +// Возвращаемое значение: +// Соответствие - итоговые параметры +// +Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт + + РезультатЧтения = Новый Соответствие; + + Попытка + + Лог.Отладка("ПутьКФайлуНастройки <%1>", ПутьКФайлуНастройки); + + РезультатЧтения = РазобратьФайл(ПутьКФайлуНастройки); + + Лог.Отладка("Итоговые параметры:"); + ПоказатьПараметрыВРежимеОтладки(РезультатЧтения); + + Исключение + + Лог.Ошибка("Ошибка чтения настроек + |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + ВызватьИсключение; + + КонецПопытки; + + Возврат РезультатЧтения; + +КонецФункции + +#КонецОбласти + +#Область Вспомогательные_процедуры_и_функции + +Функция РазобратьФайл(Знач ПутьКФайлуНастройки) + + ФайлНастроек = Новый Файл(ПутьКФайлуНастройки); + ИмяФайла = ФайлНастроек.ПолноеИмя; + + Лог.Отладка("Путь файла настроек <%1>", ИмяФайла); + + Если Не ФайлНастроек.Существует() Тогда + ВызватьИсключение СтрШаблон("Файл настроек не существует. Путь <%1>", ИмяФайла); + КонецЕсли; + + Текст = ПрочитатьТекстФайла(ИмяФайла); + + Лог.Отладка("Текст файла настроек: + |%1", Текст); + + Возврат _Парсер.РазобратьТекст(Текст); + +КонецФункции + +Функция ПрочитатьТекстФайла(Знач ИмяФайла) + + Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); + Текст = Чтение.Прочитать(); + Чтение.Закрыть(); + + Возврат Текст; + +КонецФункции + +Процедура ПоказатьПараметрыВРежимеОтладки(ЗначенияПараметров) + + ПроцессорВывода = Новый ВыводВРежимеОтладки(Лог); + ПроцессорВывода.ПоказатьНастройкиВРежимеОтладки(ЗначенияПараметров); + +КонецПроцедуры + +#КонецОбласти + +Процедура ПриСозданииОбъекта(Знач Парсер, Знач ИдентификаторПровайдера, Знач Приоритет, Знач ИмяЛога) + + _Парсер = Парсер; + _Идентификатор = ИдентификаторПровайдера; + _Приоритет = Приоритет; + _Настройки = Новый НастройкиФайловогоПровайдера; + + Лог = Логирование.ПолучитьЛог(ИмяЛога); + +КонецПроцедуры 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\320\260\321\200\321\201\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\320\260\321\200\321\201\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..8953622 --- /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\320\260\321\200\321\201\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,55 @@ +// Парсер формата INI для файлового провайдера параметров. +// Реализует контракт парсера: РасширенияФайлов() + РазобратьТекст(Текст). + +#Область ПрограммныйИнтерфейс + +// Возвращает расширения файлов, поддерживаемые парсером +// +// Возвращаемое значение: +// Строка - расширения файлов (через пробел) +// +Функция РасширенияФайлов() Экспорт + Возврат "ini"; +КонецФункции + +// Разбирает текст файла параметров в формате INI. +// Строки вида "ключ=значение"; пустые строки и строки, начинающиеся с "#", игнорируются. +// +// Параметры: +// Текст - Строка - содержимое файла параметров +// +// Возвращаемое значение: +// Соответствие - разобранные параметры +// +Функция РазобратьТекст(Знач Текст) Экспорт + + НастройкиИзФайла = Новый Соответствие; + + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.УстановитьТекст(Текст); + + Для Сч = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл + + СтрокаНастроек = ТекстовыйДокумент.ПолучитьСтроку(Сч); + + Если ПустаяСтрока(СтрокаНастроек) Или Лев(СтрокаНастроек, 1) = "#" Тогда + Продолжить; + КонецЕсли; + + Поз = СтрНайти(СтрокаНастроек, "="); + Если Поз = 0 Тогда + Продолжить; + КонецЕсли; + + Ключ = СокрЛП(Лев(СтрокаНастроек, Поз - 1)); + Значение = СокрЛП(Сред(СтрокаНастроек, Поз + 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\237\320\260\321\200\321\201\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.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\320\260\321\200\321\201\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os" new file mode 100644 index 0000000..0b59402 --- /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\320\260\321\200\321\201\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262JSON.os" @@ -0,0 +1,34 @@ +// Парсер формата JSON для файлового провайдера параметров. +// Реализует контракт парсера: РасширенияФайлов() + РазобратьТекст(Текст). + +#Область ПрограммныйИнтерфейс + +// Возвращает расширения файлов, поддерживаемые парсером +// +// Возвращаемое значение: +// Строка - расширения файлов (через пробел) +// +Функция РасширенияФайлов() Экспорт + Возврат "json"; +КонецФункции + +// Разбирает текст файла параметров в формате JSON +// +// Параметры: +// Текст - Строка - содержимое файла параметров +// +// Возвращаемое значение: +// Соответствие - разобранные параметры +// +Функция РазобратьТекст(Знач Текст) Экспорт + + ЧтениеJSON = Новый ЧтениеJSON(); + ЧтениеJSON.УстановитьСтроку(Текст); + Параметры = ПрочитатьJSON(ЧтениеJSON, Истина); + ЧтениеJSON.Закрыть(); + + Возврат Параметры; + +КонецФункции + +#КонецОбласти 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\320\260\321\200\321\201\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.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\320\260\321\200\321\201\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os" new file mode 100644 index 0000000..62e0352 --- /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\320\260\321\200\321\201\320\265\321\200\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\320\276\320\262YAML.os" @@ -0,0 +1,32 @@ +// Парсер формата YAML для файлового провайдера параметров. +// Реализует контракт парсера: РасширенияФайлов() + РазобратьТекст(Текст). + +#Использовать oscript-yaml + +#Область ПрограммныйИнтерфейс + +// Возвращает расширения файлов, поддерживаемые парсером +// +// Возвращаемое значение: +// Строка - расширения файлов (через пробел) +// +Функция РасширенияФайлов() Экспорт + Возврат "yaml yml"; +КонецФункции + +// Разбирает текст файла параметров в формате YAML +// +// Параметры: +// Текст - Строка - содержимое файла параметров +// +// Возвращаемое значение: +// Соответствие - разобранные параметры +// +Функция РазобратьТекст(Знач Текст) Экспорт + + ПроцессорЧтения = Новый ПарсерYaml; + Возврат ПроцессорЧтения.Прочитать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\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\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 169c7e0..cab4f18 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\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\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" @@ -11,13 +11,10 @@ // Выполняет чтение параметров для провайдера // -// Параметры: -// НастройкиПровайдера - Структура - (устарело) передаётся провайдеру как fallback -// // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера = Неопределено) Экспорт +Функция ПрочитатьПараметры() Экспорт Если Не Включен Тогда Возврат Новый Соответствие; @@ -27,7 +24,7 @@ Возврат Новый Соответствие; КонецЕсли; - Возврат КлассПровайдера.ПрочитатьПараметры(НастройкиПровайдера); + Возврат КлассПровайдера.ПрочитатьПараметры(); КонецФункции @@ -113,7 +110,7 @@ ИнтерфейсПровайдера.Ф("ТипПровайдера"); ИнтерфейсЧтения = Новый ИнтерфейсОбъекта; - ИнтерфейсЧтения.Ф("ПрочитатьПараметры", 1); + ИнтерфейсЧтения.Ф("ПрочитатьПараметры"); ИнтерфейсЗаписи = Новый ИнтерфейсОбъекта; ИнтерфейсЗаписи.Ф("ЗаписатьПараметры", 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\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 35339b7..9f4f012 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" @@ -78,15 +78,12 @@ КонецФункции // Выполняет чтение параметров для провайдера -// -// Параметры: -// НастройкиПровайдера - Структура - (устарело) игнорируется; для указания префикса -// использовать метод Настройки().УстановитьПрефикс(...) +// Для указания префикса использовать метод Настройки().УстановитьПрефикс(...) // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт +Функция ПрочитатьПараметры() Экспорт ЭффективныйПрефикс = _Настройки.ПолучитьПрефикс(); 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 fd00415..5fd0b47 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,10 +1,7 @@ -#Использовать logos +// Файловый провайдер параметров формата INI. +// Тонкий фасад над БазовымФайловымПровайдером с парсером INI. -Перем Лог; - -Перем _Приоритет; // Число -Перем _Идентификатор; // Строка -Перем _Настройки; // НастройкиФайловогоПровайдера +Перем _Ядро; // БазовыйФайловыйПровайдер #Область ПрограммныйИнтерфейс @@ -14,7 +11,7 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат _Приоритет; + Возврат _Ядро.Приоритет(); КонецФункции // Устанавливает приоритет провайдера @@ -26,7 +23,7 @@ // Объект.ПровайдерПараметровINI - ссылка на текущий объект // Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт - _Приоритет = НовыйПриоритет; + _Ядро.УстановитьПриоритет(НовыйПриоритет); Возврат ЭтотОбъект; КонецФункции @@ -36,7 +33,7 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат _Идентификатор; + Возврат _Ядро.Идентификатор(); КонецФункции // Устанавливает идентификатор провайдера @@ -48,7 +45,7 @@ // Объект.ПровайдерПараметровINI - ссылка на текущий объект // Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт - _Идентификатор = НовыйИдентификатор; + _Ядро.УстановитьИдентификатор(НовыйИдентификатор); Возврат ЭтотОбъект; КонецФункции @@ -58,7 +55,7 @@ // Строка - текущий тип провайдера // Функция ТипПровайдера() Экспорт - Возврат "file"; + Возврат _Ядро.ТипПровайдера(); КонецФункции // Возвращает расширения файлов по умолчанию @@ -67,7 +64,7 @@ // Строка - расширения файлов по умолчанию // Функция РасширенияФайлов() Экспорт - Возврат "ini"; + Возврат _Ядро.РасширенияФайлов(); КонецФункции // Возвращает объект настроек провайдера @@ -76,76 +73,32 @@ // НастройкиФайловогоПровайдера - настройки // Функция Настройки() Экспорт - Возврат _Настройки; + Возврат _Ядро.Настройки(); КонецФункции // Выполняет чтение параметров для провайдера // -// Параметры: -// НастройкиПровайдера - Структура - (устарело) внешние настройки -// // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт - - // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров - ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); - Если НастройкиПровайдера <> Неопределено - И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) - И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда - ЭффективныеНастройки = НастройкиПровайдера; - КонецЕсли; - - ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); - Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); - +Функция ПрочитатьПараметры() Экспорт + Возврат _Ядро.ПрочитатьПараметры(); КонецФункции -#КонецОбласти - -// Выполнить чтение настроек из файла +// Выполняет чтение и разбор одного файла параметров // // Параметры: -// ПутьКФайлу - Cтрока - путь к файлу настроек -// Возвращаемое значение: +// ПутьКФайлуНастройки - Строка - путь к файлу параметров +// +// Возвращаемое значение: // Соответствие - итоговые параметры // -Функция Прочитать(Знач ПутьКфайлу) Экспорт - - НастройкиИзФайла = Новый Соответствие; - - ТД = Новый ТекстовыйДокумент(); - ТД.Прочитать(ПутьКФайлу); - - Для Сч = 1 По ТД.КоличествоСтрок() Цикл - - СтрокаНастроек = ТД.ПолучитьСтроку(Сч); - - Если ПустаяСтрока(СтрокаНастроек) или Лев(СтрокаНастроек, 1) = "#" Тогда - Продолжить; - КонецЕсли; - - Поз = СтрНайти(СтрокаНастроек, "="); - Если Поз = 0 Тогда - Продолжить; - КонецЕсли; - - Ключ = СокрЛП(Лев(СтрокаНастроек, Поз - 1)); - Значение = СокрЛП(Сред(СтрокаНастроек, Поз + 1)); - - НастройкиИзФайла.Вставить(Ключ, Значение); - - КонецЦикла; - - Лог.Отладка("Прочитан файл настроек %1", ПутьКФайлу); - - Возврат НастройкиИзФайла; - -КонецФункции // Прочитать +Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт + Возврат _Ядро.Прочитать(ПутьКФайлуНастройки); +КонецФункции -Лог = Логирование.ПолучитьЛог("oscript.lib.configor.ini"); +#КонецОбласти -_Приоритет = 1; -_Идентификатор = "ini"; -_Настройки = Новый НастройкиФайловогоПровайдера; +Процедура ПриСозданииОбъекта() + _Ядро = Новый БазовыйФайловыйПровайдер(Новый ПарсерПараметровINI, "ini", 1, "oscript.lib.configor.ini"); +КонецПроцедуры 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\262JSON.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\262JSON.os" index 4c1fdd4..fe5102c 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\262JSON.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\262JSON.os" @@ -1,12 +1,7 @@ -#Использовать asserts -#Использовать logos +// Файловый провайдер параметров формата JSON. +// Тонкий фасад над БазовымФайловымПровайдером с парсером JSON. -Перем Лог; -Перем ПрефиксКлючаДляЧтенияВложенногоФайлаНастроек; - -Перем _Приоритет; // Число -Перем _Идентификатор; // Строка -Перем _Настройки; // НастройкиФайловогоПровайдера +Перем _Ядро; // БазовыйФайловыйПровайдер #Область ПрограммныйИнтерфейс @@ -16,7 +11,7 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат _Приоритет; + Возврат _Ядро.Приоритет(); КонецФункции // Устанавливает приоритет провайдера @@ -28,7 +23,7 @@ // Объект.ПровайдерПараметровJSON - ссылка на текущий объект // Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт - _Приоритет = НовыйПриоритет; + _Ядро.УстановитьПриоритет(НовыйПриоритет); Возврат ЭтотОбъект; КонецФункции @@ -38,7 +33,7 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат _Идентификатор; + Возврат _Ядро.Идентификатор(); КонецФункции // Устанавливает идентификатор провайдера @@ -50,7 +45,7 @@ // Объект.ПровайдерПараметровJSON - ссылка на текущий объект // Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт - _Идентификатор = НовыйИдентификатор; + _Ядро.УстановитьИдентификатор(НовыйИдентификатор); Возврат ЭтотОбъект; КонецФункции @@ -60,7 +55,7 @@ // Строка - текущий тип провайдера // Функция ТипПровайдера() Экспорт - Возврат "file"; + Возврат _Ядро.ТипПровайдера(); КонецФункции // Возвращает расширения файлов по умолчанию @@ -69,7 +64,7 @@ // Строка - расширения файлов по умолчанию // Функция РасширенияФайлов() Экспорт - Возврат "json"; + Возврат _Ядро.РасширенияФайлов(); КонецФункции // Возвращает объект настроек провайдера @@ -78,119 +73,32 @@ // НастройкиФайловогоПровайдера - настройки // Функция Настройки() Экспорт - Возврат _Настройки; + Возврат _Ядро.Настройки(); КонецФункции // Выполняет чтение параметров для провайдера // -// Параметры: -// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы -// собственные настройки провайдера, используются они -// // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт - - // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров - ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); - Если НастройкиПровайдера <> Неопределено - И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) - И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда - // Fallback: настройки переданы снаружи (обратная совместимость) - ЭффективныеНастройки = НастройкиПровайдера; - КонецЕсли; - - ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); - Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); - +Функция ПрочитатьПараметры() Экспорт + Возврат _Ядро.ПрочитатьПараметры(); КонецФункции -#КонецОбласти - -// Выполнить чтение настроек из файла +// Выполняет чтение и разбор одного файла параметров // // Параметры: -// ПутьКФайлуНастройки - Cтрока - путь к файлу настроек -// Возвращаемое значение: +// ПутьКФайлуНастройки - Строка - путь к файлу параметров +// +// Возвращаемое значение: // Соответствие - итоговые параметры // Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт - - НастройкиИзФайла = Новый Соответствие; - - Попытка - - Лог.Отладка("ПутьКФайлуНастройки <%1>", ПутьКФайлуНастройки); - - НастройкиИзФайла = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуНастройки); - - Лог.Отладка("Итоговые параметры:"); - ПоказатьПараметрыВРежимеОтладки(НастройкиИзФайла); - - Исключение - - Лог.Ошибка("Ошибка чтения настроек - |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ВызватьИсключение; - - КонецПопытки; - - Возврат НастройкиИзФайла; - -КонецФункции // Прочитать - -Функция ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуНастройки) - - ФайлНастроек = Новый Файл(ПутьКФайлуНастройки); - - НастройкиИзФайла = ПрочитатьФайлJSON(ФайлНастроек.ПолноеИмя); - - Возврат НастройкиИзФайла; - -КонецФункции // ПрочитатьНастройкиИзПараметраФайл() - -Функция ПрочитатьФайлJSON(Знач ИмяФайла) - Перем Параметры; - - Лог.Отладка("Путь файла настроек <%1>", ИмяФайла); - - СообщениеОшибки = СтрШаблон("Файл настроек не существует. Путь <%1>", ИмяФайла); - JsonСтрока = ПрочитатьФайл(ИмяФайла, СообщениеОшибки); - - Лог.Отладка("Текст файла настроек: - |%1", JsonСтрока); - - ЧтениеJSON = Новый ЧтениеJSON(); - ЧтениеJSON.УстановитьСтроку(JsonСтрока); - Параметры = ПрочитатьJSON(ЧтениеJSON, Истина); - ЧтениеJSON.Закрыть(); - - Возврат Параметры; + Возврат _Ядро.Прочитать(ПутьКФайлуНастройки); КонецФункции -Функция ПрочитатьФайл(Знач ИмяФайла, Знач СообщениеОшибки) - ФайлСуществующий = Новый Файл(ИмяФайла); - Если Не ФайлСуществующий.Существует() Тогда - ВызватьИсключение СообщениеОшибки; - КонецЕсли; - - Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); - Рез = Чтение.Прочитать(); - Чтение.Закрыть(); - Возврат Рез; -КонецФункции // ПрочитатьФайл() - -Процедура ПоказатьПараметрыВРежимеОтладки(ЗначенияПараметров) - - ПроцессорВывода = Новый ВыводВРежимеОтладки(Лог); - ПроцессорВывода.ПоказатьНастройкиВРежимеОтладки(ЗначенияПараметров); +#КонецОбласти +Процедура ПриСозданииОбъекта() + _Ядро = Новый БазовыйФайловыйПровайдер(Новый ПарсерПараметровJSON, "json", 1, "oscript.lib.configor.json"); КонецПроцедуры - -Лог = Логирование.ПолучитьЛог("oscript.lib.configor.json"); - -_Приоритет = 1; -_Идентификатор = "json"; -_Настройки = Новый НастройкиФайловогоПровайдера; 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\262VAULT.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\262VAULT.os" index 98862be..0239641 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\262VAULT.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\262VAULT.os" @@ -74,23 +74,14 @@ // Выполняет чтение параметров для провайдера // -// Параметры: -// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы -// собственные настройки провайдера, используются они -// // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера = Неопределено) Экспорт +Функция ПрочитатьПараметры() Экспорт ПрочитанныеПараметры = Новый Соответствие; - // Приоритет у собственных настроек Н = _Настройки.ПолучитьНастройки(); - Если НастройкиПровайдера <> Неопределено - И НЕ ЗначениеЗаполнено(Н.Адрес) Тогда - Н = НастройкиПровайдера; - КонецЕсли; Адрес = Н.Адрес; Токен = Н.Токен; 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\262YAML.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\262YAML.os" index a91a03e..5117f4e 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\262YAML.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\262YAML.os" @@ -1,11 +1,7 @@ -#Использовать logos -#Использовать oscript-yaml +// Файловый провайдер параметров формата YAML. +// Тонкий фасад над БазовымФайловымПровайдером с парсером YAML. -Перем Лог; - -Перем _Приоритет; // Число -Перем _Идентификатор; // Строка -Перем _Настройки; // НастройкиФайловогоПровайдера +Перем _Ядро; // БазовыйФайловыйПровайдер #Область ПрограммныйИнтерфейс @@ -15,7 +11,7 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат _Приоритет; + Возврат _Ядро.Приоритет(); КонецФункции // Устанавливает приоритет провайдера @@ -27,7 +23,7 @@ // Объект.ПровайдерПараметровYAML - ссылка на текущий объект // Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт - _Приоритет = НовыйПриоритет; + _Ядро.УстановитьПриоритет(НовыйПриоритет); Возврат ЭтотОбъект; КонецФункции @@ -37,7 +33,7 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат _Идентификатор; + Возврат _Ядро.Идентификатор(); КонецФункции // Устанавливает идентификатор провайдера @@ -49,7 +45,7 @@ // Объект.ПровайдерПараметровYAML - ссылка на текущий объект // Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт - _Идентификатор = НовыйИдентификатор; + _Ядро.УстановитьИдентификатор(НовыйИдентификатор); Возврат ЭтотОбъект; КонецФункции @@ -59,7 +55,7 @@ // Строка - текущий тип провайдера // Функция ТипПровайдера() Экспорт - Возврат "file"; + Возврат _Ядро.ТипПровайдера(); КонецФункции // Возвращает расширения файлов по умолчанию @@ -68,7 +64,7 @@ // Строка - расширения файлов по умолчанию (yaml yml) // Функция РасширенияФайлов() Экспорт - Возврат "yaml yml"; + Возврат _Ядро.РасширенияФайлов(); КонецФункции // Возвращает объект настроек провайдера @@ -77,106 +73,32 @@ // НастройкиФайловогоПровайдера - настройки // Функция Настройки() Экспорт - Возврат _Настройки; + Возврат _Ядро.Настройки(); КонецФункции // Выполняет чтение параметров для провайдера // -// Параметры: -// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы -// собственные настройки провайдера, используются они -// // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт - - // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров - ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); - Если НастройкиПровайдера <> Неопределено - И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) - И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда - ЭффективныеНастройки = НастройкиПровайдера; - КонецЕсли; - - ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); - Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); - +Функция ПрочитатьПараметры() Экспорт + Возврат _Ядро.ПрочитатьПараметры(); КонецФункции -#КонецОбласти - -#Область Вспомогательные_процедуры_и_функции - +// Выполняет чтение и разбор одного файла параметров +// +// Параметры: +// ПутьКФайлуНастройки - Строка - путь к файлу параметров +// +// Возвращаемое значение: +// Соответствие - итоговые параметры +// Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт - - ПрочитанныеПараметры = Новый Соответствие; - - Попытка - Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуНастройки); - ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуНастройки); - Лог.Отладка("Итоговые параметры:"); - ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры); - Исключение - Лог.Ошибка("Ошибка чтения настроек - |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - - Возврат ПрочитанныеПараметры; - -КонецФункции // Прочитать() - -Функция ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуНастройки) - - ФайлНастроек = Новый Файл(ПутьКФайлуНастройки); - - НастройкиИзФайла = ПрочитатьФайлYAML(ФайлНастроек.ПолноеИмя); - - Возврат НастройкиИзФайла; - -КонецФункции // ПрочитатьНастройкиИзПараметраФайл() - -Функция ПрочитатьФайлYAML(Знач ИмяФайла) - Перем Параметры; - - Лог.Отладка("Путь файла настроек <%1>", ИмяФайла); - - СообщениеОшибки = СтрШаблон("Файл настроек не существует. Путь <%1>", ИмяФайла); - YamlСтрока = ПрочитатьФайл(ИмяФайла, СообщениеОшибки); - - Лог.Отладка("Текст файла настроек: - |%1", YamlСтрока); - - ПроцессорЧтения = Новый ПарсерYaml; - Параметры = ПроцессорЧтения.ПрочитатьYaml(YamlСтрока); - - Возврат Параметры; + Возврат _Ядро.Прочитать(ПутьКФайлуНастройки); КонецФункции -Функция ПрочитатьФайл(Знач ИмяФайла, Знач СообщениеОшибки) - ФайлСуществующий = Новый Файл(ИмяФайла); - Если Не ФайлСуществующий.Существует() Тогда - ВызватьИсключение СообщениеОшибки; - КонецЕсли; - - Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); - Рез = Чтение.Прочитать(); - Чтение.Закрыть(); - Возврат Рез; -КонецФункции // ПрочитатьФайл() - -Процедура ПоказатьПараметрыВРежимеОтладки(ЗначенияПараметров) - - ПроцессорВывода = Новый ВыводВРежимеОтладки(Лог); - ПроцессорВывода.ПоказатьНастройкиВРежимеОтладки(ЗначенияПараметров); - -КонецПроцедуры - #КонецОбласти -Лог = Логирование.ПолучитьЛог("oscript.lib.configor.yaml"); - -_Приоритет = 1; -_Идентификатор = "yaml"; -_Настройки = Новый НастройкиФайловогоПровайдера; \ No newline at end of file +Процедура ПриСозданииОбъекта() + _Ядро = Новый БазовыйФайловыйПровайдер(Новый ПарсерПараметровYAML, "yaml", 1, "oscript.lib.configor.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\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" index e04b711..a55ec81 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\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" @@ -98,13 +98,10 @@ // Выполняет чтение параметров для провайдера // -// Параметры: -// НастройкиПровайдера - Структура - игнорируется -// // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт +Функция ПрочитатьПараметры() Экспорт Лог.Отладка("Считываю параметры из соответствия"); 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 7a68ec1..fb957d5 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" @@ -8,7 +8,6 @@ Перем КлассПровайдера; // Объект Перем ИндексКаталоговПоиска; // Соответствие -Перем НастройкиПровайдера; // Структура Перем РезультатЧтения; // Соответствие @@ -66,8 +65,6 @@ ПрочитатьНастройки(ВходящиеНастройкиПровайдера); - НастройкиПровайдера = ВходящиеНастройкиПровайдера; - Возврат ПрочитатьПараметрыПоНастройкам(); КонецФункции @@ -275,16 +272,6 @@ КонецФункции -Функция СкопироватьСтруктуру(ВходящаяСтруктура) - НоваяСтруктура = Новый Структура; - - Для каждого КлючЗначение Из ВходящаяСтруктура Цикл - НоваяСтруктура.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение); - КонецЦикла; - - Возврат НоваяСтруктура; -КонецФункции - Процедура ПрочитатьНастройки(Знач НастройкиПровайдера) Если НастройкиПровайдера.Свойство("РасширенияФайлаПараметров") @@ -490,12 +477,8 @@ РефлекторОбъекта = Новый РефлекторОбъекта(ВходящийКлассПровайдера); - ПроверкаПровайдера = РефлекторОбъекта.РеализуетИнтерфейс(ИнтерфейсФайловогоПровайдера); - - Если НЕ ПроверкаПровайдера Тогда - // TODO: Добавить описание того что реализовано, а что нет - ВызватьИсключение "Не реализован необходимый интерфейс провайдера"; - КонецЕсли; + // Истина - рефлектор сам залогирует, какие методы интерфейса не реализованы, и вызовет исключение + РефлекторОбъекта.РеализуетИнтерфейс(ИнтерфейсФайловогоПровайдера, Истина); КлассПровайдера = ВходящийКлассПровайдера; 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 c173501..7647d36 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" @@ -102,7 +102,7 @@ // Параметры: // КлассОбъект - Объект - класс провайдера // Приоритет - Число - числовой приоритет выполнения провайдера -// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан — берётся из Идентификатор() провайдера +// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан - берётся из Идентификатор() провайдера // при коллизии добавляется суффикс #2, #3 и т.д. // // Возвращаемое значение: 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 bbea87e..96f5936 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" @@ -221,7 +221,7 @@ МенеджерПараметров.Прочитать(); - // Первый провайдер (config.json) даёт Элемент1, Элемент2; второй (config2.json) — Элемент3 + // Первый провайдер (config.json) даёт Элемент1, Элемент2; второй (config2.json) - Элемент3 Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрМассив[0], МенеджерПараметров.Параметр("ПараметрМассив.0"), "Результат должен совпадать с ожиданиями."); Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрСтруктура.Массив[0], МенеджерПараметров.Параметр("ПараметрСтруктура.Массив.0"), "Результат должен совпадать с ожиданиями."); Утверждения.ПроверитьРавенство(СтруктураПараметров.ПараметрСтруктура.Соответствие["КлючВнутри1"], МенеджерПараметров.Параметр("ПараметрСтруктура.Соответствие.КлючВнутри1"), "Результат должен совпадать с ожиданиями."); diff --git "a/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" "b/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" index f813eb3..7492777 100644 --- "a/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" +++ "b/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" @@ -42,7 +42,7 @@ Провайдер2 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON()); Провайдер3 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровJSON()); - // Тогда — идентификаторы уникальны + // Тогда - идентификаторы уникальны Ожидаем.Что(Провайдер1.Идентификатор).Равно("json"); Ожидаем.Что(Провайдер2.Идентификатор).Равно("json#2"); Ожидаем.Что(Провайдер3.Идентификатор).Равно("json#3"); @@ -96,7 +96,7 @@ Соответствие2 = Новый Соответствие; Соответствие2.Вставить("ключ2", "знач2"); - // Когда — два провайдера Соответствие, каждый с независимыми данными + // Когда - два провайдера Соответствие, каждый с независимыми данными Провайдер1 = МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровСоответствие()); Провайдер1.Настройки().УстановитьПараметры(Соответствие1); @@ -158,7 +158,7 @@ // Дано Файл = СоздатьВременныйJSON("{""direct"": ""result""}"); - // Когда — вызов Прочитать() напрямую на провайдере (теперь Экспорт) + // Когда - вызов Прочитать() напрямую на провайдере (теперь Экспорт) Провайдер = Новый ПровайдерПараметровJSON(); Результат = Провайдер.Прочитать(Файл); From 473fc5daeec765c8db7559ce8702c869a73bda97 Mon Sep 17 00:00:00 2001 From: Egor Ivanov Date: Mon, 8 Jun 2026 13:04:30 +0300 Subject: [PATCH 6/6] =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D0=BB=20?= =?UTF-8?q?=D0=B0=D0=B2=D1=82=D0=BE=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\265\321\202\321\200\320\276\320\262.os" | 36 +++++++++++++++ ...0\320\271\320\264\320\265\321\200_test.os" | 46 +++++++++++++++++++ 2 files changed, 82 insertions(+) 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 7647d36..273f5a2 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" @@ -203,6 +203,42 @@ КонецПроцедуры +// Производит автоматическую настройку файловых провайдеров «по умолчанию». +// Для каждого указанного формата подключается отдельный встроенный провайдер +// со своими настройками: имя файла + стандартные каталоги поиска. +// +// Параметры: +// НаименованиеФайла - Строка - Наименование файла параметров (без расширения), например "config" +// ВложенныйПодкаталог - Строка - Дополнительный каталог для стандартных путей (необязательно) +// ИдентификаторыПровайдеров - Строка - Идентификаторы встроенных провайдеров через пробел (по умолчанию "yaml json") +// +Процедура АвтоНастройка(Знач НаименованиеФайла, + Знач ВложенныйПодкаталог = "", + Знач ИдентификаторыПровайдеров = "yaml json") Экспорт + + Если ВложенныйПодкаталог = Неопределено Тогда + ВложенныйПодкаталог = ""; + КонецЕсли; + + Для Каждого Идентификатор Из СтрРазделить(НРег(ИдентификаторыПровайдеров), " ", Ложь) Цикл + + Если Идентификатор = "yaml" Тогда + Провайдер = Новый ПровайдерПараметровYAML; + ИначеЕсли Идентификатор = "json" Тогда + Провайдер = Новый ПровайдерПараметровJSON; + Иначе + ВызватьИсключение СтрШаблон("Неизвестный формат провайдера для автонастройки: <%1>", Идентификатор); + КонецЕсли; + + ДобавитьПровайдерПараметров(Провайдер, 0) + .Настройки() + .УстановитьИмяФайла(НаименованиеФайла) + .УстановитьСтандартныеКаталогиПоиска(ВложенныйПодкаталог); + + КонецЦикла; + +КонецПроцедуры + // Устанавливает класс параметров для описания конструктора параметров и установки результатов чтения // // Параметры: diff --git "a/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" "b/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" index 7492777..75ebe59 100644 --- "a/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" +++ "b/tests/\320\234\321\203\320\273\321\214\321\202\320\270\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200_test.os" @@ -184,6 +184,52 @@ КонецПроцедуры +&Тест +Процедура ТестДолжен_АвтоНастройкаПоУмолчаниюПодключитьYAMLиJSON() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + + // Когда — без указания форматов берётся "yaml json" + МенеджерПараметров.АвтоНастройка("config"); + + // Тогда — оба провайдера зарегистрированы, каждый со своими настройками + Ожидаем.Что(МенеджерПараметров.ПровайдерПоИдентификатору("yaml") <> Неопределено).ЭтоИстина(); + Ожидаем.Что(МенеджерПараметров.ПровайдерПоИдентификатору("json") <> Неопределено).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_АвтоНастройкаПодключитьТолькоУказанныеФорматы() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + + // Когда — только json + МенеджерПараметров.АвтоНастройка("config", , "json"); + + // Тогда + Ожидаем.Что(МенеджерПараметров.ПровайдерПоИдентификатору("json") <> Неопределено).ЭтоИстина(); + Ожидаем.Что(МенеджерПараметров.ПровайдерПоИдентификатору("yaml")).ЭтоНеопределено(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_АвтоНастройкаВыброситьИсключениеНаНеизвестномФормате() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + + // Когда / Тогда + Попытка + МенеджерПараметров.АвтоНастройка("config", , "toml"); + ВызватьИсключение "Ожидалось исключение для неизвестного формата"; + Исключение + // ок — неизвестный формат должен приводить к исключению + КонецПопытки; + +КонецПроцедуры + // Вспомогательные Функция СоздатьВременныйJSON(Знач ТекстJSON)