diff --git a/packagedef b/packagedef index d3c9048..63fdd77 100644 --- a/packagedef +++ b/packagedef @@ -4,7 +4,7 @@ // Описание.Имя("configor") - .Версия("0.7.2") + .Версия("0.8.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\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" new file mode 100644 index 0000000..404f1a8 --- /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\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" @@ -0,0 +1,77 @@ +#Использовать logos + +Перем Лог; +Перем Префикс; + +Процедура ПриСозданииОбъекта(ПрефиксПеременныхСреды = "") + Префикс = ПрефиксПеременныхСреды; + Лог = Логирование.ПолучитьЛог("oscript.lib.configor.env"); +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Возвращает приоритет провайдера +// +// Возвращаемое значение: +// Число - текущий приоритет провайдера +// +Функция Приоритет() Экспорт + Возврат 2; +КонецФункции + +// Возвращает идентификатор провайдера +// +// Возвращаемое значение: +// Строка - текущий идентификатор провайдера +// +Функция Идентификатор() Экспорт + Возврат "env"; +КонецФункции + +// Возвращает тип провайдера +// +// Возвращаемое значение: +// Строка - текущий тип провайдера +// +Функция ТипПровайдера() Экспорт + Возврат "env"; +КонецФункции + +// Выполняет чтение параметров для провайдера +// +// Параметры: +// НастройкиПровайдера - Структура - структура настроек провайдера +// +// Возвращаемое значение: +// Соответствие - результат чтения провайдера +// +Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт + + Лог.Отладка("Выполняю чтение параметров переменных среды для префикса <%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" new file mode 100644 index 0000000..3e14e84 --- /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\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" @@ -0,0 +1,111 @@ +#Использовать logos + +Перем Лог; + +#Область ПрограммныйИнтерфейс + +// Возвращает приоритет провайдера +// +// Возвращаемое значение: +// Число - текущий приоритет провайдера +// +Функция Приоритет() Экспорт + Возврат 1; +КонецФункции + +// Возвращает идентификатор провайдера +// +// Возвращаемое значение: +// Строка - текущий идентификатор провайдера +// +Функция Идентификатор() Экспорт + Возврат "ini"; +КонецФункции + +// Возвращает тип провайдера +// +// Возвращаемое значение: +// Строка - текущий тип провайдера +// +Функция ТипПровайдера() Экспорт + Возврат "file"; +КонецФункции + +// Возвращает расширения файлов по умолчанию +// +// Возвращаемое значение: +// Строка - расширения файлов по умолчанию +// +Функция РасширенияФайлов() Экспорт + Возврат "ini"; +КонецФункции + +// Выполняет чтение параметров для провайдера +// +// Параметры: +// НастройкиПровайдера - Структура - структура настроек провайдера +// +// Возвращаемое значение: +// Соответствие - результат чтения провайдера +// +Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт + + ПрочитанныеПараметры = Новый Соответствие; + + ФайлПараметров = Новый Файл(НастройкиПровайдера.ФайлПараметров); + + Если Не ФайлПараметров.Существует() Тогда + Лог.Отладка("Не найден файл параметров <%1>", ФайлПараметров.ПолноеИмя); + Возврат ПрочитанныеПараметры; + КонецЕсли; + + Лог.Отладка("Выполняю чтение файла параметров <%1>", ФайлПараметров.ПолноеИмя); + ПрочитанныеПараметры = Прочитать(ФайлПараметров.ПолноеИмя); + + Возврат ПрочитанныеПараметры; + +КонецФункции + +#КонецОбласти + +// Выполнить чтение настроек из файла +// +// Параметры: +// ПутьКФайлу - Cтрока - путь к файлу настроек +// Возвращаемое значение: +// Соответствие - итоговые параметры +// +Функция Прочитать(Знач ПутьКФайлу) + + НастройкиИзФайла = Новый Соответствие; + + ТД = Новый ТекстовыйДокумент(); + ТД.Прочитать(ПутьКФайлу); + + Для Сч = 1 По ТД.КоличествоСтрок() Цикл + + СтрокаНастроек = ТД.ПолучитьСтроку(Сч); + + Если ПустаяСтрока(СтрокаНастроек) или Лев(СтрокаНастроек, 1) = "#" Тогда + Продолжить; + КонецЕсли; + + Поз = СтрНайти(СтрокаНастроек, "="); + Если Поз = 0 Тогда + Продолжить; + КонецЕсли; + + Ключ = СокрЛП(Лев(СтрокаНастроек, Поз - 1)); + Значение = СокрЛП(Сред(СтрокаНастроек, Поз + 1)); + + НастройкиИзФайла.Вставить(Ключ, Значение); + + КонецЦикла; + + Лог.Отладка("Прочитан файл настроек %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\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" new file mode 100644 index 0000000..6952324 --- /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\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" @@ -0,0 +1,63 @@ +#Использовать logos + +Перем Лог; +Перем мПараметры; + +Процедура ПриСозданииОбъекта(Параметры) + + Если ТипЗнч(Параметры) <> Тип("Соответствие") Тогда + ВызватьИсключение + "Для провайдера параметров Соответствие, источником параметров может быть только соответствие"; + КонецЕсли; + + мПараметры = Параметры; + Лог = Логирование.ПолучитьЛог("oscript.lib.configor.map"); + +КонецПроцедуры + +#Область ПрограммныйИнтерфейс + +// Возвращает приоритет провайдера +// +// Возвращаемое значение: +// Число - текущий приоритет провайдера +// +Функция Приоритет() Экспорт + Возврат 3; +КонецФункции + +// Возвращает идентификатор провайдера +// +// Возвращаемое значение: +// Строка - текущий идентификатор провайдера +// +Функция Идентификатор() Экспорт + Возврат "map"; +КонецФункции + +// Возвращает тип провайдера +// +// Возвращаемое значение: +// Строка - текущий тип провайдера +// +Функция ТипПровайдера() Экспорт + Возврат "memory"; +КонецФункции + +// Выполняет чтение параметров для провайдера +// +// Параметры: +// НастройкиПровайдера - Структура - структура настроек провайдера +// +// Возвращаемое значение: +// Соответствие - результат чтения провайдера +// +Функция ПрочитатьПараметры(НастройкиПровайдера) Экспорт + + Лог.Отладка("Считываю параметры из соответствия"); + + Возврат мПараметры; + +КонецФункции + +#КонецОбласти diff --git a/tests/fixtures/test-config.ini b/tests/fixtures/test-config.ini new file mode 100644 index 0000000..1731dfd --- /dev/null +++ b/tests/fixtures/test-config.ini @@ -0,0 +1,6 @@ +owner.contact.email=mail.ru +owner.contact.tel=77777777 + +admin.contact.email=admin.ru + +#person.address=home 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\262ENV.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\262ENV.os" new file mode 100644 index 0000000..8ccd0bc --- /dev/null +++ "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\262ENV.os" @@ -0,0 +1,44 @@ +#использовать "../src/" +#Использовать asserts + +&Тест +Процедура ПроверитьПолучениеПеременныхСредыБезПрефикса() Экспорт + + // Дано + + УстановитьПеременнуюСреды("TestConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс); + + // Когда + + МенеджерПараметров = Новый МенеджерПараметров(); + + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV()); + + МенеджерПараметров.Прочитать(); + + // Тогда + + Ожидаем.Что(МенеджерПараметров.Параметр("TestConfigorEnv")).Равно("ТестЗначение"); + +КонецПроцедуры + +&Тест +Процедура ПроверитьПолучениеПеременныхСредыСПрефиксом() Экспорт + + // Дано + + УстановитьПеременнуюСреды("Test_ConfigorEnv", "ТестЗначение", РасположениеПеременнойСреды.Процесс); + + // Когда + + МенеджерПараметров = Новый МенеджерПараметров(); + + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV("Test_")); + + МенеджерПараметров.Прочитать(); + + // Тогда + + Ожидаем.Что(МенеджерПараметров.Параметр("ConfigorEnv")).Равно("ТестЗначение"); + +КонецПроцедуры 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" new file mode 100644 index 0000000..f27d3f0 --- /dev/null +++ "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" @@ -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")).ЭтоНеопределено(); + +КонецПроцедуры 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\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/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\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" new file mode 100644 index 0000000..7f6fc42 --- /dev/null +++ "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\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" @@ -0,0 +1,48 @@ +#использовать "../src/" +#Использовать asserts + +&Тест +Процедура ПроверитьПолучениеПараметровИзСоответствия() Экспорт + + // Дано + + Массив = Новый Массив; + Массив.Добавить(2); + + Соответствие = Новый Соответствие; + Соответствие.Вставить("Тест1", 1); + Соответствие.Вставить("Тест2", Массив); + + // Когда + + МенеджерПараметров = Новый МенеджерПараметров(); + + МенеджерПараметров.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровСоответствие(Соответствие)); + + МенеджерПараметров.Прочитать(); + + // Тогда + + Ожидаем.Что(МенеджерПараметров.Параметр("Тест1")).Равно(1); + Ожидаем.Что(МенеджерПараметров.Параметр("Тест2")[0]).Равно(2); + +КонецПроцедуры + +&Тест +Процедура ПроверитьОшибкуПриПередачиДругогоИсточника() Экспорт + + БылоИсключение = Ложь; + + Попытка + А = Новый ПровайдерПараметровСоответствие(Новый Массив); + Исключение + + БылоИсключение = Истина; + + Ожидаем.Что(ИнформацияОбОшибке().Описание) + .Содержит("Для провайдера параметров Соответствие, источником параметров может быть только соответствие"); + КонецПопытки; + + Ожидаем.Что(БылоИсключение).ЭтоИстина(); + +КонецПроцедуры