Skip to content

Commit 5c43845

Browse files
authored
Merge pull request #29 from sfaqer/feature/providers
Добавлены новые провайдеры настроек
2 parents add0a01 + 35fabc3 commit 5c43845

8 files changed

+375
-1
lines changed

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.7.2")
7+
.Версия("0.8.0")
88
.Автор("Khorev Aleksey")
99
.АдресАвтора("[email protected]")
1010
.Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml")
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#Использовать logos
2+
3+
Перем Лог;
4+
Перем Префикс;
5+
6+
Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "")
7+
Префикс = ПрефиксПеременныхСреды;
8+
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env");
9+
КонецПроцедуры
10+
11+
#Область ПрограммныйИнтерфейс
12+
13+
// Возвращает приоритет провайдера
14+
//
15+
// Возвращаемое значение:
16+
// Число - текущий приоритет провайдера
17+
//
18+
Функция Приоритет() Экспорт
19+
Возврат 2;
20+
КонецФункции
21+
22+
// Возвращает идентификатор провайдера
23+
//
24+
// Возвращаемое значение:
25+
// Строка - текущий идентификатор провайдера
26+
//
27+
Функция Идентификатор() Экспорт
28+
Возврат "env";
29+
КонецФункции
30+
31+
// Возвращает тип провайдера
32+
//
33+
// Возвращаемое значение:
34+
// Строка - текущий тип провайдера
35+
//
36+
Функция ТипПровайдера() Экспорт
37+
Возврат "env";
38+
КонецФункции
39+
40+
// Выполняет чтение параметров для провайдера
41+
//
42+
// Параметры:
43+
// НастройкиПровайдера - Структура - структура настроек провайдера
44+
//
45+
// Возвращаемое значение:
46+
// Соответствие - результат чтения провайдера
47+
//
48+
Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт
49+
50+
Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс);
51+
52+
ПеременныеСреды = ПеременныеСреды();
53+
54+
Если ПустаяСтрока(Префикс) Тогда
55+
Возврат ПеременныеСреды;
56+
КонецЕсли;
57+
58+
ПрочитанныеПараметры = Новый Соответствие;
59+
60+
Для каждого ПеременнаяСреды Из ПеременныеСреды Цикл
61+
62+
Если СтрНачинаетсяС(ПеременнаяСреды.Ключ, Префикс) Тогда
63+
64+
ПрочитанныеПараметры.Вставить(
65+
Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - СтрДлина(Префикс)),
66+
ПеременнаяСреды.Значение
67+
);
68+
69+
КонецЕсли;
70+
71+
КонецЦикла;
72+
73+
Возврат ПрочитанныеПараметры;
74+
75+
КонецФункции
76+
77+
#КонецОбласти
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
#Использовать logos
2+
3+
Перем Лог;
4+
5+
#Область ПрограммныйИнтерфейс
6+
7+
// Возвращает приоритет провайдера
8+
//
9+
// Возвращаемое значение:
10+
// Число - текущий приоритет провайдера
11+
//
12+
Функция Приоритет() Экспорт
13+
Возврат 1;
14+
КонецФункции
15+
16+
// Возвращает идентификатор провайдера
17+
//
18+
// Возвращаемое значение:
19+
// Строка - текущий идентификатор провайдера
20+
//
21+
Функция Идентификатор() Экспорт
22+
Возврат "ini";
23+
КонецФункции
24+
25+
// Возвращает тип провайдера
26+
//
27+
// Возвращаемое значение:
28+
// Строка - текущий тип провайдера
29+
//
30+
Функция ТипПровайдера() Экспорт
31+
Возврат "file";
32+
КонецФункции
33+
34+
// Возвращает расширения файлов по умолчанию
35+
//
36+
// Возвращаемое значение:
37+
// Строка - расширения файлов по умолчанию
38+
//
39+
Функция РасширенияФайлов() Экспорт
40+
Возврат "ini";
41+
КонецФункции
42+
43+
// Выполняет чтение параметров для провайдера
44+
//
45+
// Параметры:
46+
// НастройкиПровайдера - Структура - структура настроек провайдера
47+
//
48+
// Возвращаемое значение:
49+
// Соответствие - результат чтения провайдера
50+
//
51+
Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт
52+
53+
ПрочитанныеПараметры = Новый Соответствие;
54+
55+
ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);
56+
57+
Если Не ФайлПараметров.Существует() Тогда
58+
Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя);
59+
Возврат ПрочитанныеПараметры;
60+
КонецЕсли;
61+
62+
Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя);
63+
ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя);
64+
65+
Возврат ПрочитанныеПараметры;
66+
67+
КонецФункции
68+
69+
#КонецОбласти
70+
71+
// Выполнить чтение настроек из файла
72+
//
73+
// Параметры:
74+
// ПутьКФайлу - Cтрока - путь к файлу настроек
75+
// Возвращаемое значение:
76+
// Соответствие - итоговые параметры
77+
//
78+
Функция Прочитать(Знач ПутьКФайлу)
79+
80+
НастройкиИзФайла = Новый Соответствие;
81+
82+
ТД = Новый ТекстовыйДокумент();
83+
ТД.Прочитать(ПутьКФайлу);
84+
85+
Для Сч = 1 По ТД.КоличествоСтрок() Цикл
86+
87+
СтрокаНастроек = ТД.ПолучитьСтроку(Сч);
88+
89+
Если ПустаяСтрока(СтрокаНастроек) или Лев(СтрокаНастроек, 1) = "#" Тогда
90+
Продолжить;
91+
КонецЕсли;
92+
93+
Поз = СтрНайти(СтрокаНастроек, "=");
94+
Если Поз = 0 Тогда
95+
Продолжить;
96+
КонецЕсли;
97+
98+
Ключ = СокрЛП(Лев(СтрокаНастроек, Поз - 1));
99+
Значение = СокрЛП(Сред(СтрокаНастроек, Поз + 1));
100+
101+
НастройкиИзФайла.Вставить(Ключ, Значение);
102+
103+
КонецЦикла;
104+
105+
Лог.Отладка("Прочитан файл настроек %1", ПутьКФайлу);
106+
107+
Возврат НастройкиИзФайла;
108+
109+
КонецФункции // Прочитать
110+
111+
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.ini");
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#Использовать logos
2+
3+
Перем Лог;
4+
Перем мПараметры;
5+
6+
Процедура ПриСозданииОбъекта(Параметры)
7+
8+
Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда
9+
ВызватьИсключение
10+
"Для провайдера параметров Соответствие, источником параметров может быть только соответствие";
11+
КонецЕсли;
12+
13+
мПараметры = Параметры;
14+
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map");
15+
16+
КонецПроцедуры
17+
18+
#Область ПрограммныйИнтерфейс
19+
20+
// Возвращает приоритет провайдера
21+
//
22+
// Возвращаемое значение:
23+
// Число - текущий приоритет провайдера
24+
//
25+
Функция Приоритет() Экспорт
26+
Возврат 3;
27+
КонецФункции
28+
29+
// Возвращает идентификатор провайдера
30+
//
31+
// Возвращаемое значение:
32+
// Строка - текущий идентификатор провайдера
33+
//
34+
Функция Идентификатор() Экспорт
35+
Возврат "map";
36+
КонецФункции
37+
38+
// Возвращает тип провайдера
39+
//
40+
// Возвращаемое значение:
41+
// Строка - текущий тип провайдера
42+
//
43+
Функция ТипПровайдера() Экспорт
44+
Возврат "memory";
45+
КонецФункции
46+
47+
// Выполняет чтение параметров для провайдера
48+
//
49+
// Параметры:
50+
// НастройкиПровайдера - Структура - структура настроек провайдера
51+
//
52+
// Возвращаемое значение:
53+
// Соответствие - результат чтения провайдера
54+
//
55+
Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт
56+
57+
Лог.Отладка("Считываю параметры из соответствия");
58+
59+
Возврат мПараметры;
60+
61+
КонецФункции
62+
63+
#КонецОбласти

tests/fixtures/test-config.ini

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
owner.contact.email=mail.ru
2+
owner.contact.tel=77777777
3+
4+
admin.contact.email=admin.ru
5+
6+
#person.address=home
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
#использовать "../src/"
2+
#Использовать asserts
3+
4+
&Тест
5+
Процедура ПроверитьПолучениеПеременныхСредыБезПрефикса() Экспорт
6+
7+
// Дано
8+
9+
УстановитьПеременнуюСреды("TestConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс);
10+
11+
// Когда
12+
13+
МенеджерПараметров = Новый МенеджерПараметров();
14+
15+
МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV());
16+
17+
МенеджерПараметров.Прочитать();
18+
19+
// Тогда
20+
21+
Ожидаем.Что(МенеджерПараметров.Параметр("TestConfigorEnv")).Равно("ТестЗначение");
22+
23+
КонецПроцедуры
24+
25+
&Тест
26+
Процедура ПроверитьПолучениеПеременныхСредыСПрефиксом() Экспорт
27+
28+
// Дано
29+
30+
УстановитьПеременнуюСреды("Test_ConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс);
31+
32+
// Когда
33+
34+
МенеджерПараметров = Новый МенеджерПараметров();
35+
36+
МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV("Test_"));
37+
38+
МенеджерПараметров.Прочитать();
39+
40+
// Тогда
41+
42+
Ожидаем.Что(МенеджерПараметров.Параметр("ConfigorEnv")).Равно("ТестЗначение");
43+
44+
КонецПроцедуры
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#использовать "../src/"
2+
#Использовать asserts
3+
4+
&Тест
5+
Процедура ПроверитьПолучениеПараметров() Экспорт
6+
7+
// Дано
8+
9+
МенеджерПараметров = Новый МенеджерПараметров();
10+
МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровINI());
11+
МенеджерПараметров.УстановитьФайлПараметров(ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-config.ini"));
12+
МенеджерПараметров.Прочитать();
13+
14+
// Когда
15+
16+
МенеджерПараметров.Прочитать();
17+
18+
// Тогда
19+
20+
Ожидаем.Что(МенеджерПараметров.Параметр("owner.contact.email")).Равно("mail.ru");
21+
Ожидаем.Что(МенеджерПараметров.Параметр("owner.contact.tel")).Равно("77777777");
22+
Ожидаем.Что(МенеджерПараметров.Параметр("admin.contact.email")).Равно("admin.ru");
23+
Ожидаем.Что(МенеджерПараметров.Параметр("person.address")).ЭтоНеопределено();
24+
25+
КонецПроцедуры
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#использовать "../src/"
2+
#Использовать asserts
3+
4+
&Тест
5+
Процедура ПроверитьПолучениеПараметровИзСоответствия() Экспорт
6+
7+
// Дано
8+
9+
Массив = Новый Массив;
10+
Массив.Добавить(2);
11+
12+
Соответствие = Новый Соответствие;
13+
Соответствие.Вставить("Тест1", 1);
14+
Соответствие.Вставить("Тест2", Массив);
15+
16+
// Когда
17+
18+
МенеджерПараметров = Новый МенеджерПараметров();
19+
20+
МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровСоответствие(Соответствие));
21+
22+
МенеджерПараметров.Прочитать();
23+
24+
// Тогда
25+
26+
Ожидаем.Что(МенеджерПараметров.Параметр("Тест1")).Равно(1);
27+
Ожидаем.Что(МенеджерПараметров.Параметр("Тест2")[0]).Равно(2);
28+
29+
КонецПроцедуры
30+
31+
&Тест
32+
Процедура ПроверитьОшибкуПриПередачиДругогоИсточника() Экспорт
33+
34+
БылоИсключение = Ложь;
35+
36+
Попытка
37+
А = Новый ПровайдерПараметровСоответствие(Новый Массив);
38+
Исключение
39+
40+
БылоИсключение = Истина;
41+
42+
Ожидаем.Что(ИнформацияОбОшибке().Описание)
43+
.Содержит("Для провайдера параметров Соответствие, источником параметров может быть только соответствие");
44+
КонецПопытки;
45+
46+
Ожидаем.Что(БылоИсключение).ЭтоИстина();
47+
48+
КонецПроцедуры

0 commit comments

Comments
 (0)