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\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\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..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,10 +1,15 @@ #Использовать logos Перем Лог; -Перем Префикс; + +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиПровайдераENV Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "") - Префикс = ПрефиксПеременныхСреды; + _Приоритет = 2; + _Идентификатор = "env"; + _Настройки = Новый НастройкиПровайдераENV(ПрефиксПеременныхСреды); Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env"); КонецПроцедуры @@ -16,7 +21,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 2; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровENV - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -25,7 +43,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "env"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровENV - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -37,17 +68,29 @@ Возврат "env"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиПровайдераENV - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) игнорируется; для указания префикса +// использовать метод Настройки().УстановитьПрефикс(...) // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + ЭффективныйПрефикс = _Настройки.ПолучитьПрефикс(); - Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс); + Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", ЭффективныйПрефикс); ПеременныеСреды = ПеременныеСреды(); ПрочитанныеПараметры = Новый Соответствие; @@ -63,16 +106,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..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" @@ -2,6 +2,10 @@ Перем Лог; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -10,7 +14,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровINI - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -19,7 +36,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "ini"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровINI - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -40,29 +70,35 @@ Возврат "ini"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт - - ПрочитанныеПараметры = Новый Соответствие; - - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); - Возврат ПрочитанныеПараметры; +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) + И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда + ЭффективныеНастройки = НастройкиПровайдера; КонецЕсли; - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); - - Возврат ПрочитанныеПараметры; + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); КонецФункции @@ -75,7 +111,7 @@ // Возвращаемое значение: // Соответствие - итоговые параметры // -Функция Прочитать(Знач ПутьКФайлу) +Функция Прочитать(Знач ПутьКфайлу) Экспорт НастройкиИзФайла = Новый Соответствие; @@ -109,3 +145,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..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" @@ -4,6 +4,10 @@ Перем Лог; Перем ПрефиксКлючаДляЧтенияВложенногоФайлаНастроек; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -12,7 +16,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровJSON - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -21,7 +38,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "json"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровJSON - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -36,35 +66,43 @@ // Возвращает расширения файлов по умолчанию // // Возвращаемое значение: -// Строка - расширения файлов по умолчанию (yaml yml) +// Строка - расширения файлов по умолчанию // Функция РасширенияФайлов() Экспорт Возврат "json"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы +// собственные настройки провайдера, используются они // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт - - ПрочитанныеПараметры = Новый Соответствие; - - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); - Возврат ПрочитанныеПараметры; +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) + И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда + // Fallback: настройки переданы снаружи (обратная совместимость) + ЭффективныеНастройки = НастройкиПровайдера; КонецЕсли; - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); - - Возврат ПрочитанныеПараметры; + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); КонецФункции @@ -77,7 +115,7 @@ // Возвращаемое значение: // Соответствие - итоговые параметры // -Функция Прочитать(Знач ПутьКФайлуНастройки) +Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт НастройкиИзФайла = Новый Соответствие; @@ -152,3 +190,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..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" @@ -3,6 +3,10 @@ Перем Лог; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиФайловогоПровайдера + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -11,7 +15,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровYAML - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -20,7 +37,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "yaml"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровYAML - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -41,52 +71,61 @@ Возврат "yaml yml"; КонецФункции +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - (устарело) внешние настройки; если заданы +// собственные настройки провайдера, используются они // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт + + // Вызов напрямую — делегируем в ФайловыйПровайдерПараметров + ЭффективныеНастройки = _Настройки.ПолучитьНастройки(); + Если НастройкиПровайдера <> Неопределено + И НЕ ЗначениеЗаполнено(ЭффективныеНастройки.ПутьКФайлуПараметров) + И ЭффективныеНастройки.КаталогиПоиска.Количество() = 0 Тогда + ЭффективныеНастройки = НастройкиПровайдера; + КонецЕсли; - ПрочитанныеПараметры = Новый Соответствие; + ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект); + Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки); - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); +КонецФункции - ПутьКФайлуПараметров = ФайлПараметров.ПолноеИмя; +#КонецОбласти - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ПутьКФайлуПараметров); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - Попытка +#Область Вспомогательные_процедуры_и_функции + +Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт - Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуПараметров); + ПрочитанныеПараметры = Новый Соответствие; - ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуПараметров); - + Попытка + Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуНастройки); + ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуНастройки); Лог.Отладка("Итоговые параметры:"); ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры); - Исключение - Лог.Ошибка("Ошибка чтения настроек |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; Возврат ПрочитанныеПараметры; -КонецФункции - -#КонецОбласти - -#Область Вспомогательные_процедуры_и_функции +КонецФункции // Прочитать() Функция ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуНастройки) @@ -136,4 +175,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..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,18 +1,29 @@ #Использовать logos Перем Лог; -Перем мПараметры; -Процедура ПриСозданииОбъекта(Параметры) +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиПровайдераСоответствие - Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда - ВызватьИсключение - "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; - КонецЕсли; +Процедура ПриСозданииОбъекта(Параметры = Неопределено) - мПараметры = Параметры; + _Приоритет = 3; + _Идентификатор = "map"; Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map"); + Если Параметры = Неопределено Тогда + _Настройки = Новый НастройкиПровайдераСоответствие; + Иначе + + Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда + ВызватьИсключение + "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; + КонецЕсли; + + _Настройки = Новый НастройкиПровайдераСоответствие(Параметры); + КонецЕсли; + КонецПроцедуры #Область ПрограммныйИнтерфейс @@ -23,7 +34,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 3; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -32,7 +56,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "map"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -44,20 +81,39 @@ Возврат "memory"; КонецФункции +// Устанавливает источник параметров +// +// Параметры: +// ИсточникПараметров - Соответствие - источник параметров +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьПараметры(Знач ИсточникПараметров) Экспорт + + _Настройки.УстановитьПараметры(ИсточникПараметров); + Возврат ЭтотОбъект; + +КонецФункции + // Выполняет чтение параметров для провайдера // // Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// НастройкиПровайдера - Структура - игнорируется // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры(НастройкиПровайдера = Неопределено) Экспорт Лог.Отладка("Считываю параметры из соответствия"); - Возврат мПараметры; + Возврат _Настройки.ПолучитьПараметры(); + +КонецФункции +Функция Настройки() Экспорт + Возврат _Настройки; КонецФункции #КонецОбласти 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 7ee8028..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" @@ -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; + КонецЦикла; + +КонецФункции + Функция ПолучитьНастройкуФайловогоПровайдера() Если НастройкаФайловогоПровайдера = Неопределено Тогда 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); + Запись.Закрыть(); + + Возврат ПутьКФайлу; + +КонецФункции