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.Запрос);
// Когда
МенеджерПараметров.Прочитать();