Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//

Описание.Имя("configor")
.Версия("0.7.2")
.Версия("0.8.0")
.Автор("Khorev Aleksey")
.АдресАвтора("Khorevaa@gmail.com")
.Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#Использовать logos

Перем Лог;
Перем Префикс;

Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "")
Префикс = ПрефиксПеременныхСреды;
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env");
КонецПроцедуры

#Область ПрограммныйИнтерфейс

// Возвращает приоритет провайдера
//
// Возвращаемое значение:
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
Возврат 2;
КонецФункции

// Возвращает идентификатор провайдера
//
// Возвращаемое значение:
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
Возврат "env";
КонецФункции

// Возвращает тип провайдера
//
// Возвращаемое значение:
// Строка - текущий тип провайдера
//
Функция ТипПровайдера() Экспорт
Возврат "env";
КонецФункции

// Выполняет чтение параметров для провайдера
//
// Параметры:
// НастройкиПровайдера - Структура - структура настроек провайдера
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт

Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%1>", Префикс);

ПеременныеСреды = ПеременныеСреды();

Если ПустаяСтрока(Префикс) Тогда
Возврат ПеременныеСреды;
КонецЕсли;

ПрочитанныеПараметры = Новый Соответствие;

Для каждого ПеременнаяСреды Из ПеременныеСреды Цикл

Если СтрНачинаетсяС(ПеременнаяСреды.Ключ, Префикс) Тогда

ПрочитанныеПараметры.Вставить(
Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - СтрДлина(Префикс)),
ПеременнаяСреды.Значение
);

КонецЕсли;

КонецЦикла;

Возврат ПрочитанныеПараметры;

КонецФункции

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#Использовать logos

Перем Лог;

#Область ПрограммныйИнтерфейс

// Возвращает приоритет провайдера
//
// Возвращаемое значение:
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
Возврат 1;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Норм, что и там и там приоритет 1? Может у энвов его понизить/повысить относительно файлов?

КонецФункции

// Возвращает идентификатор провайдера
//
// Возвращаемое значение:
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
Возврат "ini";
КонецФункции

// Возвращает тип провайдера
//
// Возвращаемое значение:
// Строка - текущий тип провайдера
//
Функция ТипПровайдера() Экспорт
Возврат "file";
КонецФункции

// Возвращает расширения файлов по умолчанию
//
// Возвращаемое значение:
// Строка - расширения файлов по умолчанию
//
Функция РасширенияФайлов() Экспорт
Возврат "ini";
КонецФункции

// Выполняет чтение параметров для провайдера
//
// Параметры:
// НастройкиПровайдера - Структура - структура настроек провайдера
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт

ПрочитанныеПараметры = Новый Соответствие;

ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров);

Если Не ФайлПараметров.Существует() Тогда
Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя);
Возврат ПрочитанныеПараметры;
КонецЕсли;

Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя);
ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя);

Возврат ПрочитанныеПараметры;

КонецФункции

#КонецОбласти

// Выполнить чтение настроек из файла
//
// Параметры:
// ПутьКФайлу - Cтрока - путь к файлу настроек
// Возвращаемое значение:
// Соответствие - итоговые параметры
//
Функция Прочитать(Знач ПутьКФайлу)

НастройкиИзФайла = Новый Соответствие;

ТД = Новый ТекстовыйДокумент();
ТД.Прочитать(ПутьКФайлу);

Для Сч = 1 По ТД.КоличествоСтрок() Цикл

СтрокаНастроек = ТД.ПолучитьСтроку(Сч);

Если ПустаяСтрока(СтрокаНастроек) или Лев(СтрокаНастроек, 1) = "#" Тогда
Продолжить;
КонецЕсли;

Поз = СтрНайти(СтрокаНастроек, "=");
Если Поз = 0 Тогда
Продолжить;
КонецЕсли;

Ключ = СокрЛП(Лев(СтрокаНастроек, Поз - 1));
Значение = СокрЛП(Сред(СтрокаНастроек, Поз + 1));

НастройкиИзФайла.Вставить(Ключ, Значение);

КонецЦикла;

Лог.Отладка("Прочитан файл настроек %1", ПутьКФайлу);

Возврат НастройкиИзФайла;

КонецФункции // Прочитать

Лог = Логирование.ПолучитьЛог("oscript.lib.configor.ini");
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#Использовать logos

Перем Лог;
Перем мПараметры;

Процедура ПриСозданииОбъекта(Параметры)

Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда
ВызватьИсключение
"Для провайдера параметров Соответствие, источником параметров может быть только соответствие";
КонецЕсли;

мПараметры = Параметры;
Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map");

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

#Область ПрограммныйИнтерфейс

// Возвращает приоритет провайдера
//
// Возвращаемое значение:
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
Возврат 3;
КонецФункции

// Возвращает идентификатор провайдера
//
// Возвращаемое значение:
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
Возврат "map";
КонецФункции

// Возвращает тип провайдера
//
// Возвращаемое значение:
// Строка - текущий тип провайдера
//
Функция ТипПровайдера() Экспорт
Возврат "memory";
КонецФункции

// Выполняет чтение параметров для провайдера
//
// Параметры:
// НастройкиПровайдера - Структура - структура настроек провайдера
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт

Лог.Отладка("Считываю параметры из соответствия");

Возврат мПараметры;

КонецФункции

#КонецОбласти
6 changes: 6 additions & 0 deletions tests/fixtures/test-config.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
owner.contact.email=mail.ru
owner.contact.tel=77777777

admin.contact.email=admin.ru

#person.address=home
44 changes: 44 additions & 0 deletions tests/ПровайдерПараметровENV.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#использовать "../src/"
#Использовать asserts

&Тест
Процедура ПроверитьПолучениеПеременныхСредыБезПрефикса() Экспорт

// Дано

УстановитьПеременнуюСреды("TestConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс);

// Когда

МенеджерПараметров = Новый МенеджерПараметров();

МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV());

МенеджерПараметров.Прочитать();

// Тогда

Ожидаем.Что(МенеджерПараметров.Параметр("TestConfigorEnv")).Равно("ТестЗначение");

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

&Тест
Процедура ПроверитьПолучениеПеременныхСредыСПрефиксом() Экспорт

// Дано

УстановитьПеременнуюСреды("Test_ConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс);

// Когда

МенеджерПараметров = Новый МенеджерПараметров();

МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV("Test_"));

МенеджерПараметров.Прочитать();

// Тогда

Ожидаем.Что(МенеджерПараметров.Параметр("ConfigorEnv")).Равно("ТестЗначение");

КонецПроцедуры
25 changes: 25 additions & 0 deletions tests/ПровайдерПараметровINI.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#использовать "../src/"
#Использовать asserts

&Тест
Процедура ПроверитьПолучениеПараметров() Экспорт

// Дано

МенеджерПараметров = Новый МенеджерПараметров();
МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровINI());
МенеджерПараметров.УстановитьФайлПараметров(ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "test-config.ini"));
МенеджерПараметров.Прочитать();

// Когда

МенеджерПараметров.Прочитать();

// Тогда

Ожидаем.Что(МенеджерПараметров.Параметр("owner.contact.email")).Равно("mail.ru");
Ожидаем.Что(МенеджерПараметров.Параметр("owner.contact.tel")).Равно("77777777");
Ожидаем.Что(МенеджерПараметров.Параметр("admin.contact.email")).Равно("admin.ru");
Ожидаем.Что(МенеджерПараметров.Параметр("person.address")).ЭтоНеопределено();

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#использовать "../src/"
#Использовать asserts

&Тест
Процедура ПроверитьПолучениеПараметровИзСоответствия() Экспорт

// Дано

Массив = Новый Массив;
Массив.Добавить(2);

Соответствие = Новый Соответствие;
Соответствие.Вставить("Тест1", 1);
Соответствие.Вставить("Тест2", Массив);

// Когда

МенеджерПараметров = Новый МенеджерПараметров();

МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровСоответствие(Соответствие));

МенеджерПараметров.Прочитать();

// Тогда

Ожидаем.Что(МенеджерПараметров.Параметр("Тест1")).Равно(1);
Ожидаем.Что(МенеджерПараметров.Параметр("Тест2")[0]).Равно(2);

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

&Тест
Процедура ПроверитьОшибкуПриПередачиДругогоИсточника() Экспорт

БылоИсключение = Ложь;

Попытка
А = Новый ПровайдерПараметровСоответствие(Новый Массив);
Исключение

БылоИсключение = Истина;

Ожидаем.Что(ИнформацияОбОшибке().Описание)
.Содержит("Для провайдера параметров Соответствие, источником параметров может быть только соответствие");
КонецПопытки;

Ожидаем.Что(БылоИсключение).ЭтоИстина();

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