diff --git a/docs/README.md b/docs/README.md index cac5f06..f0bfd63 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/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/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\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\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\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 35b8b40..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 @@ // Выполняет чтение параметров для провайдера // -// Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера -// // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры() Экспорт Если Не Включен Тогда Возврат Новый Соответствие; @@ -27,7 +24,7 @@ Возврат Новый Соответствие; КонецЕсли; - Возврат КлассПровайдера.ПрочитатьПараметры(НастройкиПровайдера); + Возврат КлассПровайдера.ПрочитатьПараметры(); КонецФункции @@ -52,6 +49,24 @@ Приоритет = НовыйПриоритет; КонецПроцедуры +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - новый идентификатор провайдера +// +Процедура УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + Идентификатор = НовыйИдентификатор; +КонецПроцедуры + +// Возвращает объект настроек провайдера +// +// Возвращаемое значение: +// Произвольный - объект настроек или Неопределено если провайдер не поддерживает метод Настройки() +// +Функция Настройки() Экспорт + Возврат КлассПровайдера.Настройки(); +КонецФункции + // Выполняет запись данных провайдера // // Параметры: @@ -95,7 +110,7 @@ ИнтерфейсПровайдера.Ф("ТипПровайдера"); ИнтерфейсЧтения = Новый ИнтерфейсОбъекта; - ИнтерфейсЧтения.Ф("ПрочитатьПараметры", 1); + ИнтерфейсЧтения.Ф("ПрочитатьПараметры"); ИнтерфейсЗаписи = Новый ИнтерфейсОбъекта; ИнтерфейсЗаписи.Ф("ЗаписатьПараметры", 1); @@ -111,17 +126,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..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" @@ -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,26 @@ Возврат "env"; КонецФункции -// Выполняет чтение параметров для провайдера +// Возвращает объект настроек провайдера // -// Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// Возвращаемое значение: +// НастройкиПровайдераENV - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + +// Выполняет чтение параметров для провайдера +// Для указания префикса использовать метод Настройки().УстановитьПрефикс(...) // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры() Экспорт + + ЭффективныйПрефикс = _Настройки.ПолучитьПрефикс(); - Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс); + Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", ЭффективныйПрефикс); ПеременныеСреды = ПеременныеСреды(); ПрочитанныеПараметры = Новый Соответствие; @@ -63,16 +103,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..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,6 +1,7 @@ -#Использовать logos +// Файловый провайдер параметров формата INI. +// Тонкий фасад над БазовымФайловымПровайдером с парсером INI. -Перем Лог; +Перем _Ядро; // БазовыйФайловыйПровайдер #Область ПрограммныйИнтерфейс @@ -10,7 +11,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Ядро.Приоритет(); +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровINI - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Ядро.УстановитьПриоритет(НовыйПриоритет); + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -19,7 +33,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "ini"; + Возврат _Ядро.Идентификатор(); +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровINI - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Ядро.УстановитьИдентификатор(НовыйИдентификатор); + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -28,7 +55,7 @@ // Строка - текущий тип провайдера // Функция ТипПровайдера() Экспорт - Возврат "file"; + Возврат _Ядро.ТипПровайдера(); КонецФункции // Возвращает расширения файлов по умолчанию @@ -37,75 +64,41 @@ // Строка - расширения файлов по умолчанию // Функция РасширенияФайлов() Экспорт - Возврат "ini"; + Возврат _Ядро.РасширенияФайлов(); КонецФункции -// Выполняет чтение параметров для провайдера +// Возвращает объект настроек провайдера // -// Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Ядро.Настройки(); +КонецФункции + +// Выполняет чтение параметров для провайдера // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт - - ПрочитанныеПараметры = Новый Соответствие; - - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); - - Возврат ПрочитанныеПараметры; - +Функция ПрочитатьПараметры() Экспорт + Возврат _Ядро.ПрочитатьПараметры(); КонецФункции -#КонецОбласти - -// Выполнить чтение настроек из файла +// Выполняет чтение и разбор одного файла параметров // // Параметры: -// ПутьКФайлу - Cтрока - путь к файлу настроек -// Возвращаемое значение: +// ПутьКФайлуНастройки - Строка - путь к файлу параметров +// +// Возвращаемое значение: // Соответствие - итоговые параметры // -Функция Прочитать(Знач ПутьКФайлу) - - НастройкиИзФайла = Новый Соответствие; - - ТД = Новый ТекстовыйДокумент(); - ТД.Прочитать(ПутьКФайлу); - - Для Сч = 1 По ТД.КоличествоСтрок() Цикл - - СтрокаНастроек = ТД.ПолучитьСтроку(Сч); - - Если ПустаяСтрока(СтрокаНастроек) или Лев(СтрокаНастроек, 1) = "#" Тогда - Продолжить; - КонецЕсли; - - Поз = СтрНайти(СтрокаНастроек, "="); - Если Поз = 0 Тогда - Продолжить; - КонецЕсли; - - Ключ = СокрЛП(Лев(СтрокаНастроек, Поз - 1)); - Значение = СокрЛП(Сред(СтрокаНастроек, Поз + 1)); - - НастройкиИзФайла.Вставить(Ключ, Значение); - - КонецЦикла; - - Лог.Отладка("Прочитан файл настроек %1", ПутьКФайлу); - - Возврат НастройкиИзФайла; +Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт + Возврат _Ядро.Прочитать(ПутьКФайлуНастройки); +КонецФункции -КонецФункции // Прочитать +#КонецОбласти -Лог = Логирование.ПолучитьЛог("oscript.lib.configor.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 60287a3..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,8 +1,7 @@ -#Использовать asserts -#Использовать logos +// Файловый провайдер параметров формата JSON. +// Тонкий фасад над БазовымФайловымПровайдером с парсером JSON. -Перем Лог; -Перем ПрефиксКлючаДляЧтенияВложенногоФайлаНастроек; +Перем _Ядро; // БазовыйФайловыйПровайдер #Область ПрограммныйИнтерфейс @@ -12,7 +11,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Ядро.Приоритет(); +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровJSON - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Ядро.УстановитьПриоритет(НовыйПриоритет); + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -21,7 +33,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "json"; + Возврат _Ядро.Идентификатор(); +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровJSON - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Ядро.УстановитьИдентификатор(НовыйИдентификатор); + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -30,125 +55,50 @@ // Строка - текущий тип провайдера // Функция ТипПровайдера() Экспорт - Возврат "file"; + Возврат _Ядро.ТипПровайдера(); КонецФункции // Возвращает расширения файлов по умолчанию // // Возвращаемое значение: -// Строка - расширения файлов по умолчанию (yaml yml) +// Строка - расширения файлов по умолчанию // Функция РасширенияФайлов() Экспорт - Возврат "json"; + Возврат _Ядро.РасширенияФайлов(); КонецФункции -// Выполняет чтение параметров для провайдера +// Возвращает объект настроек провайдера // -// Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Ядро.Настройки(); +КонецФункции + +// Выполняет чтение параметров для провайдера // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт - - ПрочитанныеПараметры = Новый Соответствие; - - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); - ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); - - Возврат ПрочитанныеПараметры; - +Функция ПрочитатьПараметры() Экспорт + Возврат _Ядро.ПрочитатьПараметры(); КонецФункции -#КонецОбласти - -// Выполнить чтение настроек из файла +// Выполняет чтение и разбор одного файла параметров // // Параметры: -// ПутьКФайлуНастройки - 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"); 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..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" @@ -4,6 +4,10 @@ Перем Лог; +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиПровайдераVault + #Область ПрограммныйИнтерфейс // Возвращает приоритет провайдера @@ -12,7 +16,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровVAULT - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -21,7 +38,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "vault"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровVAULT - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -33,21 +63,29 @@ Возврат "vault"; КонецФункции -// Выполняет чтение параметров для провайдера +// Возвращает объект настроек провайдера // -// Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// Возвращаемое значение: +// НастройкиПровайдераVault - настройки +// +Функция Настройки() Экспорт + Возврат _Настройки; +КонецФункции + +// Выполняет чтение параметров для провайдера // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт +Функция ПрочитатьПараметры() Экспорт ПрочитанныеПараметры = Новый Соответствие; - Адрес = НастройкиПровайдера.Адрес; - Токен = НастройкиПровайдера.Токен; - Запрос = НастройкиПровайдера.Запрос; + Н = _Настройки.ПолучитьНастройки(); + + Адрес = Н.Адрес; + Токен = Н.Токен; + Запрос = Н.Запрос; Если Не ЗначениеЗаполнено(Адрес) Тогда Лог.Отладка("Не указан адрес сервера. Чтение невозможно"); @@ -139,3 +177,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..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,7 +1,7 @@ -#Использовать logos -#Использовать oscript-yaml +// Файловый провайдер параметров формата YAML. +// Тонкий фасад над БазовымФайловымПровайдером с парсером YAML. -Перем Лог; +Перем _Ядро; // БазовыйФайловыйПровайдер #Область ПрограммныйИнтерфейс @@ -11,7 +11,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 1; + Возврат _Ядро.Приоритет(); +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровYAML - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Ядро.УстановитьПриоритет(НовыйПриоритет); + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -20,7 +33,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "yaml"; + Возврат _Ядро.Идентификатор(); +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровYAML - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Ядро.УстановитьИдентификатор(НовыйИдентификатор); + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -29,7 +55,7 @@ // Строка - текущий тип провайдера // Функция ТипПровайдера() Экспорт - Возврат "file"; + Возврат _Ядро.ТипПровайдера(); КонецФункции // Возвращает расширения файлов по умолчанию @@ -38,102 +64,41 @@ // Строка - расширения файлов по умолчанию (yaml yml) // Функция РасширенияФайлов() Экспорт - Возврат "yaml yml"; + Возврат _Ядро.РасширенияФайлов(); КонецФункции -// Выполняет чтение параметров для провайдера +// Возвращает объект настроек провайдера // -// Параметры: -// НастройкиПровайдера - Структура - структура настроек провайдера +// Возвращаемое значение: +// НастройкиФайловогоПровайдера - настройки +// +Функция Настройки() Экспорт + Возврат _Ядро.Настройки(); +КонецФункции + +// Выполняет чтение параметров для провайдера // // Возвращаемое значение: // Соответствие - результат чтения провайдера // -Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт - - ПрочитанныеПараметры = Новый Соответствие; - - ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); - - ПутьКФайлуПараметров = ФайлПараметров.ПолноеИмя; - - Если Не ФайлПараметров.Существует() Тогда - Лог.Отладка("Не найден файл параметров <%1>", ПутьКФайлуПараметров); - Возврат ПрочитанныеПараметры; - КонецЕсли; - - Попытка - - Лог.Отладка("ПутьКФайлуПараметров <%1>", ПутьКФайлуПараметров); - - ПрочитанныеПараметры = ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуПараметров); - - Лог.Отладка("Итоговые параметры:"); - ПоказатьПараметрыВРежимеОтладки(ПрочитанныеПараметры); - - Исключение - - Лог.Ошибка("Ошибка чтения настроек - |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - ВызватьИсключение; - - КонецПопытки; - - Возврат ПрочитанныеПараметры; - +Функция ПрочитатьПараметры() Экспорт + Возврат _Ядро.ПрочитатьПараметры(); КонецФункции -#КонецОбласти - -#Область Вспомогательные_процедуры_и_функции - -Функция ПрочитатьНастройкиИзПараметраФайл(ПутьКФайлуНастройки) - - ФайлНастроек = Новый Файл(ПутьКФайлуНастройки); - - НастройкиИзФайла = ПрочитатьФайлYAML(ФайлНастроек.ПолноеИмя); - - Возврат НастройкиИзФайла; - -КонецФункции // ПрочитатьНастройкиИзПараметраФайл() - -Функция ПрочитатьФайлYAML(Знач ИмяФайла) - Перем Параметры; - - Лог.Отладка("Путь файла настроек <%1>", ИмяФайла); - - СообщениеОшибки = СтрШаблон("Файл настроек не существует. Путь <%1>", ИмяФайла); - YamlСтрока = ПрочитатьФайл(ИмяФайла, СообщениеОшибки); - - Лог.Отладка("Текст файла настроек: - |%1", YamlСтрока); - - ПроцессорЧтения = Новый ПарсерYaml; - Параметры = ПроцессорЧтения.ПрочитатьYaml(YamlСтрока); - - Возврат Параметры; +// Выполняет чтение и разбор одного файла параметров +// +// Параметры: +// ПутьКФайлуНастройки - Строка - путь к файлу параметров +// +// Возвращаемое значение: +// Соответствие - итоговые параметры +// +Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт + Возврат _Ядро.Прочитать(ПутьКФайлуНастройки); КонецФункции -Функция ПрочитатьФайл(Знач ИмяФайла, Знач СообщениеОшибки) - ФайлСуществующий = Новый Файл(ИмяФайла); - Если Не ФайлСуществующий.Существует() Тогда - ВызватьИсключение СообщениеОшибки; - КонецЕсли; - - Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); - Рез = Чтение.Прочитать(); - Чтение.Закрыть(); - Возврат Рез; -КонецФункции // ПрочитатьФайл() - -Процедура ПоказатьПараметрыВРежимеОтладки(ЗначенияПараметров) - - ПроцессорВывода = Новый ВыводВРежимеОтладки(Лог); - ПроцессорВывода.ПоказатьНастройкиВРежимеОтладки(ЗначенияПараметров); - -КонецПроцедуры - #КонецОбласти -Лог = Логирование.ПолучитьЛог("oscript.lib.configor.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 6952324..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" @@ -1,18 +1,29 @@ #Использовать logos Перем Лог; -Перем мПараметры; -Процедура ПриСозданииОбъекта(Параметры) +Перем _Приоритет; // Число +Перем _Идентификатор; // Строка +Перем _Настройки; // НастройкиПровайдераСоответствие - Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда - ВызватьИсключение - "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; - КонецЕсли; +Процедура ПриСозданииОбъекта(Параметры = Неопределено) - мПараметры = Параметры; + _Приоритет = 3; + _Идентификатор = "map"; Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map"); + Если Параметры = Неопределено Тогда + _Настройки = Новый НастройкиПровайдераСоответствие; + Иначе + + Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда + ВызватьИсключение + "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; + КонецЕсли; + + _Настройки = Новый НастройкиПровайдераСоответствие(Параметры); + КонецЕсли; + КонецПроцедуры #Область ПрограммныйИнтерфейс @@ -23,7 +34,20 @@ // Число - текущий приоритет провайдера // Функция Приоритет() Экспорт - Возврат 3; + Возврат _Приоритет; +КонецФункции + +// Устанавливает приоритет провайдера +// +// Параметры: +// НовыйПриоритет - Число - приоритет +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт + _Приоритет = НовыйПриоритет; + Возврат ЭтотОбъект; КонецФункции // Возвращает идентификатор провайдера @@ -32,7 +56,20 @@ // Строка - текущий идентификатор провайдера // Функция Идентификатор() Экспорт - Возврат "map"; + Возврат _Идентификатор; +КонецФункции + +// Устанавливает идентификатор провайдера +// +// Параметры: +// НовыйИдентификатор - Строка - идентификатор +// +// Возвращаемое значение: +// Объект.ПровайдерПараметровСоответствие - ссылка на текущий объект +// +Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт + _Идентификатор = НовыйИдентификатор; + Возврат ЭтотОбъект; КонецФункции // Возвращает тип провайдера @@ -44,20 +81,36 @@ Возврат "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..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 @@ ПрочитатьНастройки(ВходящиеНастройкиПровайдера); - НастройкиПровайдера = ВходящиеНастройкиПровайдера; - Возврат ПрочитатьПараметрыПоНастройкам(); КонецФункции @@ -242,13 +239,16 @@ КонецПроцедуры Функция ВыполнитьЧтениеПровайдера(Знач ИмяФайлаПараметров) - - НастройкаПровайдераДляТекущегоЧтения = СкопироватьСтруктуру(НастройкиПровайдера); - НастройкаПровайдераДляТекущегоЧтения.Вставить("ФайлПараметров", ИмяФайлаПараметров); - РезультатЧтенияФайла = КлассПровайдера.ПрочитатьПараметры(НастройкаПровайдераДляТекущегоЧтения); + ФайлПараметров = Новый Файл(ИмяФайлаПараметров); + + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат Новый Соответствие; + КонецЕсли; - Возврат РезультатЧтенияФайла; + Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат КлассПровайдера.Прочитать(ИмяФайлаПараметров); КонецФункции @@ -272,16 +272,6 @@ КонецФункции -Функция СкопироватьСтруктуру(ВходящаяСтруктура) - НоваяСтруктура = Новый Структура; - - Для каждого КлючЗначение Из ВходящаяСтруктура Цикл - НоваяСтруктура.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение); - КонецЦикла; - - Возврат НоваяСтруктура; -КонецФункции - Процедура ПрочитатьНастройки(Знач НастройкиПровайдера) Если НастройкиПровайдера.Свойство("РасширенияФайлаПараметров") @@ -487,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 7ee8028..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" @@ -14,9 +14,6 @@ Перем ПровайдерыПараметров; // Соответствие -Перем НастройкаФайловогоПровайдера; // Класс НастройкиФайловогоПровайдера -Перем НастройкаПровайдераVault; // Класс НастройкиПровайдераVault - Перем ИнтерфейсПриемника; // Класс ИнтерфейсОбъекта Перем ВнутреннийКонструкторПараметров; // Класс КонструкторПараметров @@ -100,41 +97,20 @@ КонецПроцедуры -// Устанавливает путь к файлу параметров -// -// Параметры: -// ПутьКФайлу - Строка - полный путь к файлу параметров -// -Процедура УстановитьФайлПараметров(Знач ПутьКФайлу) Экспорт - - НастройкаФайловогоПровайдера = ПолучитьНастройкуФайловогоПровайдера(); - - НастройкаФайловогоПровайдера.УстановитьФайлПараметров(ПутьКФайлу); - -КонецПроцедуры - -// Устанавливает настройки провайдера параметров -// -// Параметры: -// Настройки - Структура - настройки провайдера -// -Процедура УстановитьНастройкиVault(Знач Настройки) Экспорт - - НастройкаПровайдераVault = ПолучитьНастройкуПровайдераVault(); - - НастройкаПровайдераVault.УстановитьАдрес(Настройки.Адрес) - .УстановитьТокен(Настройки.Токен) - .УстановитьЗапрос(Настройки.Запрос); -КонецПроцедуры - // Добавляет в таблицу провайдеров произвольный класс-провайдер // // Параметры: -// КлассОбъект - Объект - класс провайдера или имя класса -// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 99) +// КлассОбъект - Объект - класс провайдера +// Приоритет - Число - числовой приоритет выполнения провайдера +// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан - берётся из Идентификатор() провайдера +// при коллизии добавляется суффикс #2, #3 и т.д. // -Процедура ДобавитьПровайдерПараметров(Знач КлассОбъект, - Знач Приоритет = Неопределено) Экспорт +// Возвращаемое значение: +// Объект - переданный КлассОбъект (для chaining настроек через Настройки()) +// +Функция ДобавитьПровайдерПараметров(Знач КлассОбъект, + Знач Приоритет = Неопределено, + Знач ИдентификаторПровайдера = Неопределено) Экспорт ДобавляемыйПровайдерПараметров = Новый ПровайдерПараметров(КлассОбъект); @@ -142,9 +118,18 @@ ДобавляемыйПровайдерПараметров.УстановитьПриоритет(Приоритет); КонецЕсли; - ПровайдерыПараметров.Вставить(ДобавляемыйПровайдерПараметров.Идентификатор, ДобавляемыйПровайдерПараметров); + Если ЗначениеЗаполнено(ИдентификаторПровайдера) Тогда + ДобавляемыйПровайдерПараметров.УстановитьИдентификатор(ИдентификаторПровайдера); + КонецЕсли; -КонецПроцедуры + ФинальныйИдентификатор = ПолучитьСвободныйИдентификатор(ДобавляемыйПровайдерПараметров.Идентификатор); + ДобавляемыйПровайдерПараметров.УстановитьИдентификатор(ФинальныйИдентификатор); + + ПровайдерыПараметров.Вставить(ФинальныйИдентификатор, ДобавляемыйПровайдерПараметров); + + Возврат ДобавляемыйПровайдерПараметров; + +КонецФункции // Отключает провайдера из таблицы провайдеров // @@ -164,13 +149,25 @@ КонецПроцедуры -// Возвращает объект настройки поиска файлов +// Возвращает класс-провайдер по идентификатору для прямой настройки // -// Возвращаемое значение: -// Объект.НастройкаФайловогоПровайдера - внутренний класс по настройке файловых провайдеров +// Параметры: +// ИдентификаторПровайдера - Строка - идентификатор провайдера (например, "json", "yaml#2") // -Функция НастройкаПоискаФайла() Экспорт - Возврат ПолучитьНастройкуФайловогоПровайдера(); +// Возвращаемое значение: +// Произвольный - класс провайдера или Неопределено если не найден +// +Функция ПровайдерПоИдентификатору(Знач ИдентификаторПровайдера) Экспорт + + Провайдер = ПровайдерыПараметров[ИдентификаторПровайдера]; + + Если Провайдер = Неопределено Тогда + Лог.Отладка("Провайдер с идентификатором <%1> не найден", ИдентификаторПровайдера); + Возврат Неопределено; + КонецЕсли; + + Возврат Провайдер; + КонецФункции // Добавляет и включает встроенный провайдер JSON @@ -206,33 +203,39 @@ КонецПроцедуры -// Производит автоматическую настройку провайдеров +// Производит автоматическую настройку файловых провайдеров «по умолчанию». +// Для каждого указанного формата подключается отдельный встроенный провайдер +// со своими настройками: имя файла + стандартные каталоги поиска. // // Параметры: -// НаименованиеФайла - Строка - Наименование файла параметров -// ВложенныйПодкаталог - Строка - Дополнительный каталог, для стандартных путей -// ИдентификаторыПровайдеров - Строка - Идентификаторы встроенных параметров, по умолчанию +// НаименованиеФайла - Строка - Наименование файла параметров (без расширения), например "config" +// ВложенныйПодкаталог - Строка - Дополнительный каталог для стандартных путей (необязательно) +// ИдентификаторыПровайдеров - Строка - Идентификаторы встроенных провайдеров через пробел (по умолчанию "yaml json") // Процедура АвтоНастройка(Знач НаименованиеФайла, - Знач ВложенныйПодкаталог = Неопределено, + Знач ВложенныйПодкаталог = "", Знач ИдентификаторыПровайдеров = "yaml json") Экспорт - НастройкаФайловогоПровайдера = ПолучитьНастройкуФайловогоПровайдера(); + Если ВложенныйПодкаталог = Неопределено Тогда + ВложенныйПодкаталог = ""; + КонецЕсли; - НастройкаФайловогоПровайдера.УстановитьИмяФайла(НаименованиеФайла); - НастройкаФайловогоПровайдера.УстановитьСтандартныеКаталогиПоиска(ВложенныйПодкаталог); + Для Каждого Идентификатор Из СтрРазделить(НРег(ИдентификаторыПровайдеров), " ", Ложь) Цикл - МассивИдентификаторовПровайдеров = СтрРазделить(Врег(ИдентификаторыПровайдеров), " "); + Если Идентификатор = "yaml" Тогда + Провайдер = Новый ПровайдерПараметровYAML; + ИначеЕсли Идентификатор = "json" Тогда + Провайдер = Новый ПровайдерПараметровJSON; + Иначе + ВызватьИсключение СтрШаблон("Неизвестный формат провайдера для автонастройки: <%1>", Идентификатор); + КонецЕсли; - ПровайдерYAML = МассивИдентификаторовПровайдеров.Найти("YAML"); - Если НЕ ПровайдерYAML = Неопределено Тогда - ИспользоватьПровайдерYAML(ПровайдерYAML); - КонецЕсли; + ДобавитьПровайдерПараметров(Провайдер, 0) + .Настройки() + .УстановитьИмяФайла(НаименованиеФайла) + .УстановитьСтандартныеКаталогиПоиска(ВложенныйПодкаталог); - ПровайдерJSON = МассивИдентификаторовПровайдеров.Найти("JSON"); - Если НЕ ПровайдерJSON = Неопределено Тогда - ИспользоватьПровайдерJSON(ПровайдерJSON); - КонецЕсли; + КонецЦикла; КонецПроцедуры @@ -350,16 +353,8 @@ ИдентификаторПровайдера = КлассПровайдера.Идентификатор; - Если КлассПровайдера.ЭтоФайловыйПровайдер() Тогда - ПараметрыПровайдера = ПолучитьНастройкуФайловогоПровайдера().ПолучитьНастройки(); - ИначеЕсли КлассПровайдера.ЭтоПровайдерVault() Тогда - ПараметрыПровайдера = ПолучитьНастройкуПровайдераVault().ПолучитьНастройки(); - Иначе - ПараметрыПровайдера = Новый Структура; - КонецЕсли; - Попытка - ПрочитанныеПараметрыПровайдера = КлассПровайдера.ПрочитатьПараметры(ПараметрыПровайдера); + ПрочитанныеПараметрыПровайдера = КлассПровайдера.ПрочитатьПараметры(); Исключение Лог.КритичнаяОшибка("Не удалось прочитать параметры используя провайдер <%1>. По причине: %2", ИдентификаторПровайдера, @@ -438,23 +433,21 @@ КонецПроцедуры -Функция ПолучитьНастройкуФайловогоПровайдера() - - Если НастройкаФайловогоПровайдера = Неопределено Тогда - НастройкаФайловогоПровайдера = Новый НастройкиФайловогоПровайдера; - КонецЕсли; - - Возврат НастройкаФайловогоПровайдера; - -КонецФункции - -Функция ПолучитьНастройкуПровайдераVault() +// Возвращает свободный идентификатор, добавляя суффикс #2, #3 при коллизии +Функция ПолучитьСвободныйИдентификатор(БазовыйИдентификатор) - Если НастройкаПровайдераVault = Неопределено Тогда - НастройкаПровайдераVault = Новый НастройкиПровайдераVault; + Если ПровайдерыПараметров[БазовыйИдентификатор] = Неопределено Тогда + Возврат БазовыйИдентификатор; КонецЕсли; - Возврат НастройкаПровайдераVault; + Счетчик = 2; + Пока Истина Цикл + Кандидат = БазовыйИдентификатор + "#" + Счетчик; + Если ПровайдерыПараметров[Кандидат] = Неопределено Тогда + Возврат Кандидат; + КонецЕсли; + Счетчик = Счетчик + 1; + КонецЦикла; КонецФункции 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..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" @@ -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\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..75ebe59 --- /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,246 @@ +#использовать "../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"); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_АвтоНастройкаПоУмолчаниюПодключитьYAMLиJSON() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + + // Когда — без указания форматов берётся "yaml json" + МенеджерПараметров.АвтоНастройка("config"); + + // Тогда — оба провайдера зарегистрированы, каждый со своими настройками + Ожидаем.Что(МенеджерПараметров.ПровайдерПоИдентификатору("yaml") <> Неопределено).ЭтоИстина(); + Ожидаем.Что(МенеджерПараметров.ПровайдерПоИдентификатору("json") <> Неопределено).ЭтоИстина(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_АвтоНастройкаПодключитьТолькоУказанныеФорматы() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + + // Когда — только json + МенеджерПараметров.АвтоНастройка("config", , "json"); + + // Тогда + Ожидаем.Что(МенеджерПараметров.ПровайдерПоИдентификатору("json") <> Неопределено).ЭтоИстина(); + Ожидаем.Что(МенеджерПараметров.ПровайдерПоИдентификатору("yaml")).ЭтоНеопределено(); + +КонецПроцедуры + +&Тест +Процедура ТестДолжен_АвтоНастройкаВыброситьИсключениеНаНеизвестномФормате() Экспорт + + // Дано + МенеджерПараметров = Новый МенеджерПараметров(); + + // Когда / Тогда + Попытка + МенеджерПараметров.АвтоНастройка("config", , "toml"); + ВызватьИсключение "Ожидалось исключение для неизвестного формата"; + Исключение + // ок — неизвестный формат должен приводить к исключению + КонецПопытки; + +КонецПроцедуры + +// Вспомогательные + +Функция СоздатьВременныйJSON(Знач ТекстJSON) + + ПутьКФайлу = ВременныеФайлы.НовоеИмяФайла("json"); + + Запись = Новый ЗаписьТекста; + Запись.Открыть(ПутьКФайлу); + Запись.ЗаписатьСтроку(ТекстJSON); + Запись.Закрыть(); + + Возврат ПутьКФайлу; + +КонецФункции 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.Запрос); // Когда МенеджерПараметров.Прочитать();