Skip to content

Commit 6db62b0

Browse files
authored
Merge pull request #49 from Segate-ekb/feature/multi_json
Возможность регистрировать несколько экземпляров провайдеров одного типа
2 parents 89044b3 + 473fc5d commit 6db62b0

24 files changed

Lines changed: 1199 additions & 456 deletions

docs/README.md

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
- [Класс МенеджерПараметров:](#класс-менеджерпараметров)
77
- [Параметр](#параметр)
88
- [ЧтениеВыполнено](#чтениевыполнено)
9+
- [ПрочитанныеПараметры](#прочитанныепараметры)
910
- [Прочитать](#прочитать)
1011
- [УстановитьФайлПараметров](#установитьфайлпараметров)
1112
- [ДобавитьПровайдерПараметров](#добавитьпровайдерпараметров)
1213
- [ОтключитьПровайдер](#отключитьпровайдер)
14+
- [ПровайдерПоИдентификатору](#провайдерпоидентификатору)
1315
- [НастройкаПоискаФайла](#настройкапоискафайла)
1416
- [ИспользоватьПровайдерJSON](#использоватьпровайдерjson)
1517
- [ИспользоватьПровайдерYAML](#использоватьпровайдерyaml)
@@ -79,6 +81,16 @@
7981
//
8082
```
8183

84+
<a id="markdown-прочитанныепараметры" name="прочитанныепараметры"></a>
85+
#### ПрочитанныеПараметры
86+
```bsl
87+
// Возвращает соответствие прочитанных параметров (сырой результат без обработки конструктором)
88+
//
89+
// Возвращаемое значение:
90+
// Соответствие - прочитанные параметры
91+
//
92+
```
93+
8294
<a id="markdown-прочитать" name="прочитать"></a>
8395
#### Прочитать
8496
```bsl
@@ -102,9 +114,21 @@
102114
// Добавляет в таблицу провайдеров произвольный класс-провайдер
103115
//
104116
// Параметры:
105-
// КлассОбъект - Объект - класс провайдера или имя класса
106-
// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 99)
117+
// КлассОбъект - Объект - класс провайдера
118+
// Приоритет - Число - числовой приоритет выполнения провайдера;
119+
// меньшее значение читается первым (по умолчанию берётся из провайдера)
120+
// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан - берётся из Идентификатор() провайдера;
121+
// при коллизии автоматически добавляется суффикс #2, #3 и т.д.
107122
//
123+
// Возвращаемое значение:
124+
// Объект - переданный КлассОбъект (для цепочки настроек через .Настройки())
125+
//
126+
```
127+
128+
Пример использования с цепочкой настроек:
129+
```bsl
130+
МП.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV, 2).Настройки()
131+
.УстановитьПрефикс("APP_");
108132
```
109133

110134
<a id="markdown-отключитьпровайдер" name="отключитьпровайдер"></a>
@@ -117,6 +141,24 @@
117141
//
118142
```
119143

144+
<a id="markdown-провайдерпоидентификатору" name="провайдерпоидентификатору"></a>
145+
#### ПровайдерПоИдентификатору
146+
```bsl
147+
// Возвращает класс провайдера по идентификатору для прямой настройки
148+
//
149+
// Параметры:
150+
// ИдентификаторПровайдера - Строка - идентификатор провайдера (например, "json", "yaml#2")
151+
//
152+
// Возвращаемое значение:
153+
// Произвольный - класс провайдера или Неопределено если не найден
154+
//
155+
```
156+
157+
Пример:
158+
```bsl
159+
МП.ПровайдерПоИдентификатору("env").Настройки().УстановитьПрефикс("APP_");
160+
```
161+
120162
<a id="markdown-настройкапоискафайла" name="настройкапоискафайла"></a>
121163
#### НастройкаПоискаФайла
122164
```bsl

features/build.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
Контекст: Отключение отладки в логах
99
Допустим Я выключаю отладку лога с именем "oscript.lib.configor"
1010
И Я очищаю параметры команды "opm" в контексте
11+
И Я устанавливаю кодировку вывода "utf-8" команды "opm"
1112

1213
Сценарий: Выполнение команды без параметров
1314
Когда Я добавляю параметр "build ." для команды "opm"

features/step_definitions/yaml-provider.os

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,21 @@
4545
Процедура ЯУстанавливаюАвтонастройкиСПараметрами(Знач ТаблицаПараметров) Экспорт
4646

4747
МенеджерПараметров = БДД.ПолучитьИзКонтекста("МенеджерПараметров");
48-
МенеджерПараметров.АвтоНастройка(ТаблицаПараметров[0][0], ТаблицаПараметров[1][0], ТаблицаПараметров[2][0]);
48+
ИмяФайла = ТаблицаПараметров[0][0];
49+
ВложенныйКаталог = ТаблицаПараметров[1][0];
50+
ФорматФайла = ТаблицаПараметров[2][0];
51+
52+
Если НРег(ФорматФайла) = "yaml" Тогда
53+
Провайдер = Новый ПровайдерПараметровYAML;
54+
Иначе
55+
Провайдер = Новый ПровайдерПараметровJSON;
56+
КонецЕсли;
57+
58+
МенеджерПараметров
59+
.ДобавитьПровайдерПараметров(Провайдер, 0)
60+
.Настройки()
61+
.УстановитьИмяФайла(ИмяФайла)
62+
.УстановитьСтандартныеКаталогиПоиска(ВложенныйКаталог);
4963

5064
КонецПроцедуры
5165

packagedef

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//
55

66
Описание.Имя("configor")
7-
.Версия("0.11.1")
7+
.Версия("0.12.0")
88
.Автор("Khorev Aleksey")
99
.АдресАвтора("Khorevaa@gmail.com")
1010
.Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml")
Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
// Базовая реализация файлового провайдера параметров.
2+
// Содержит общую механику (поверхность провайдера, чтение/разбор файла),
3+
// а формат-специфичная логика инкапсулирована в объекте-парсере.
4+
//
5+
// Контракт парсера:
6+
// * РасширенияФайлов() - Строка - поддерживаемые расширения (через пробел)
7+
// * РазобратьТекст(Текст) - Соответствие - разбор содержимого файла
8+
9+
#Использовать logos
10+
11+
Перем Лог;
12+
13+
Перем _Приоритет; // Число
14+
Перем _Идентификатор; // Строка
15+
Перем _Настройки; // НастройкиФайловогоПровайдера
16+
Перем _Парсер; // Объект-парсер формата
17+
18+
#Область ПрограммныйИнтерфейс
19+
20+
// Возвращает приоритет провайдера
21+
//
22+
// Возвращаемое значение:
23+
// Число - текущий приоритет провайдера
24+
//
25+
Функция Приоритет() Экспорт
26+
Возврат _Приоритет;
27+
КонецФункции
28+
29+
// Устанавливает приоритет провайдера
30+
//
31+
// Параметры:
32+
// НовыйПриоритет - Число - приоритет
33+
//
34+
// Возвращаемое значение:
35+
// Объект.БазовыйФайловыйПровайдер - ссылка на текущий объект
36+
//
37+
Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт
38+
_Приоритет = НовыйПриоритет;
39+
Возврат ЭтотОбъект;
40+
КонецФункции
41+
42+
// Возвращает идентификатор провайдера
43+
//
44+
// Возвращаемое значение:
45+
// Строка - текущий идентификатор провайдера
46+
//
47+
Функция Идентификатор() Экспорт
48+
Возврат _Идентификатор;
49+
КонецФункции
50+
51+
// Устанавливает идентификатор провайдера
52+
//
53+
// Параметры:
54+
// НовыйИдентификатор - Строка - идентификатор
55+
//
56+
// Возвращаемое значение:
57+
// Объект.БазовыйФайловыйПровайдер - ссылка на текущий объект
58+
//
59+
Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
60+
_Идентификатор = НовыйИдентификатор;
61+
Возврат ЭтотОбъект;
62+
КонецФункции
63+
64+
// Возвращает тип провайдера
65+
//
66+
// Возвращаемое значение:
67+
// Строка - текущий тип провайдера
68+
//
69+
Функция ТипПровайдера() Экспорт
70+
Возврат "file";
71+
КонецФункции
72+
73+
// Возвращает расширения файлов по умолчанию (из парсера)
74+
//
75+
// Возвращаемое значение:
76+
// Строка - расширения файлов
77+
//
78+
Функция РасширенияФайлов() Экспорт
79+
Возврат _Парсер.РасширенияФайлов();
80+
КонецФункции
81+
82+
// Возвращает объект настроек провайдера
83+
//
84+
// Возвращаемое значение:
85+
// НастройкиФайловогоПровайдера - настройки
86+
//
87+
Функция Настройки() Экспорт
88+
Возврат _Настройки;
89+
КонецФункции
90+
91+
// Выполняет чтение параметров для провайдера
92+
//
93+
// Возвращаемое значение:
94+
// Соответствие - результат чтения провайдера
95+
//
96+
Функция ПрочитатьПараметры() Экспорт
97+
98+
// Делегируем поиск и чтение файлов в ФайловыйПровайдерПараметров
99+
ЭффективныеНастройки = _Настройки.ПолучитьНастройки();
100+
101+
ФайловыйПровайдер = Новый ФайловыйПровайдерПараметров(ЭтотОбъект);
102+
Возврат ФайловыйПровайдер.ПрочитатьПараметры(ЭффективныеНастройки);
103+
104+
КонецФункции
105+
106+
// Выполняет чтение и разбор одного файла параметров
107+
//
108+
// Параметры:
109+
// ПутьКФайлуНастройки - Строка - путь к файлу параметров
110+
//
111+
// Возвращаемое значение:
112+
// Соответствие - итоговые параметры
113+
//
114+
Функция Прочитать(Знач ПутьКФайлуНастройки) Экспорт
115+
116+
РезультатЧтения = Новый Соответствие;
117+
118+
Попытка
119+
120+
Лог.Отладка("ПутьКФайлуНастройки <%1>", ПутьКФайлуНастройки);
121+
122+
РезультатЧтения = РазобратьФайл(ПутьКФайлуНастройки);
123+
124+
Лог.Отладка("Итоговые параметры:");
125+
ПоказатьПараметрыВРежимеОтладки(РезультатЧтения);
126+
127+
Исключение
128+
129+
Лог.Ошибка("Ошибка чтения настроек
130+
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
131+
132+
ВызватьИсключение;
133+
134+
КонецПопытки;
135+
136+
Возврат РезультатЧтения;
137+
138+
КонецФункции
139+
140+
#КонецОбласти
141+
142+
#Область Вспомогательные_процедуры_и_функции
143+
144+
Функция РазобратьФайл(Знач ПутьКФайлуНастройки)
145+
146+
ФайлНастроек = Новый Файл(ПутьКФайлуНастройки);
147+
ИмяФайла = ФайлНастроек.ПолноеИмя;
148+
149+
Лог.Отладка("Путь файла настроек <%1>", ИмяФайла);
150+
151+
Если Не ФайлНастроек.Существует() Тогда
152+
ВызватьИсключение СтрШаблон("Файл настроек не существует. Путь <%1>", ИмяФайла);
153+
КонецЕсли;
154+
155+
Текст = ПрочитатьТекстФайла(ИмяФайла);
156+
157+
Лог.Отладка("Текст файла настроек:
158+
|%1", Текст);
159+
160+
Возврат _Парсер.РазобратьТекст(Текст);
161+
162+
КонецФункции
163+
164+
Функция ПрочитатьТекстФайла(Знач ИмяФайла)
165+
166+
Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8);
167+
Текст = Чтение.Прочитать();
168+
Чтение.Закрыть();
169+
170+
Возврат Текст;
171+
172+
КонецФункции
173+
174+
Процедура ПоказатьПараметрыВРежимеОтладки(ЗначенияПараметров)
175+
176+
ПроцессорВывода = Новый ВыводВРежимеОтладки(Лог);
177+
ПроцессорВывода.ПоказатьНастройкиВРежимеОтладки(ЗначенияПараметров);
178+
179+
КонецПроцедуры
180+
181+
#КонецОбласти
182+
183+
Процедура ПриСозданииОбъекта(Знач Парсер, Знач ИдентификаторПровайдера, Знач Приоритет, Знач ИмяЛога)
184+
185+
_Парсер = Парсер;
186+
_Идентификатор = ИдентификаторПровайдера;
187+
_Приоритет = Приоритет;
188+
_Настройки = Новый НастройкиФайловогоПровайдера;
189+
190+
Лог = Логирование.ПолучитьЛог(ИмяЛога);
191+
192+
КонецПроцедуры
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
Перем Префикс; // Строка - префикс фильтрации переменных среды
3+
4+
#Область Публичное_API
5+
6+
// Устанавливает префикс фильтрации переменных среды
7+
//
8+
// Параметры:
9+
// ПрефиксФильтра - Строка - префикс
10+
//
11+
// Возвращаемое значение:
12+
// НастройкиПровайдераENV - ссылка на текущий объект
13+
//
14+
Функция УстановитьПрефикс(Знач ПрефиксФильтра) Экспорт
15+
Префикс = ПрефиксФильтра;
16+
Возврат ЭтотОбъект;
17+
КонецФункции
18+
19+
// Возвращает установленный префикс
20+
//
21+
// Возвращаемое значение:
22+
// Строка - текущий префикс
23+
//
24+
Функция ПолучитьПрефикс() Экспорт
25+
Возврат Префикс;
26+
КонецФункции
27+
28+
#КонецОбласти
29+
30+
Процедура ПриСозданииОбъекта(НачальныйПрефикс = "")
31+
Префикс = НачальныйПрефикс;
32+
КонецПроцедуры
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
2+
Перем мПараметры; // Соответствие
3+
4+
#Область Публичное_API
5+
6+
// Устанавливает источник параметров
7+
//
8+
// Параметры:
9+
// ИсточникПараметров - Соответствие - источник параметров
10+
//
11+
// Возвращаемое значение:
12+
// НастройкиПровайдераСоответствие - ссылка на текущий объект
13+
//
14+
Функция УстановитьПараметры(Знач ИсточникПараметров) Экспорт
15+
16+
Если ТипЗнч(ИсточникПараметров) <> Тип("Соответствие") Тогда
17+
ВызватьИсключение
18+
"Для провайдера параметров Соответствие, источником параметров может быть только соответствие";
19+
КонецЕсли;
20+
21+
мПараметры = ИсточникПараметров;
22+
Возврат ЭтотОбъект;
23+
24+
КонецФункции
25+
26+
// Возвращает установленный источник параметров
27+
//
28+
// Возвращаемое значение:
29+
// Соответствие - текущий источник параметров
30+
//
31+
Функция ПолучитьПараметры() Экспорт
32+
Возврат мПараметры;
33+
КонецФункции
34+
35+
#КонецОбласти
36+
37+
Процедура ПриСозданииОбъекта(НачальныеПараметры = Неопределено)
38+
39+
Если НачальныеПараметры <> Неопределено Тогда
40+
УстановитьПараметры(НачальныеПараметры);
41+
Иначе
42+
мПараметры = Новый Соответствие;
43+
КонецЕсли;
44+
45+
КонецПроцедуры

0 commit comments

Comments
 (0)