Skip to content
Open
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
46 changes: 44 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@
- [Класс МенеджерПараметров:](#класс-менеджерпараметров)
- [Параметр](#параметр)
- [ЧтениеВыполнено](#чтениевыполнено)
- [ПрочитанныеПараметры](#прочитанныепараметры)
- [Прочитать](#прочитать)
- [УстановитьФайлПараметров](#установитьфайлпараметров)
- [ДобавитьПровайдерПараметров](#добавитьпровайдерпараметров)
- [ОтключитьПровайдер](#отключитьпровайдер)
- [ПровайдерПоИдентификатору](#провайдерпоидентификатору)
- [НастройкаПоискаФайла](#настройкапоискафайла)
- [ИспользоватьПровайдерJSON](#использоватьпровайдерjson)
- [ИспользоватьПровайдерYAML](#использоватьпровайдерyaml)
Expand Down Expand Up @@ -79,6 +81,16 @@
//
```

<a id="markdown-прочитанныепараметры" name="прочитанныепараметры"></a>
#### ПрочитанныеПараметры
```bsl
// Возвращает соответствие прочитанных параметров (сырой результат без обработки конструктором)
//
// Возвращаемое значение:
// Соответствие - прочитанные параметры
//
```

<a id="markdown-прочитать" name="прочитать"></a>
#### Прочитать
```bsl
Expand All @@ -102,9 +114,21 @@
// Добавляет в таблицу провайдеров произвольный класс-провайдер
//
// Параметры:
// КлассОбъект - Объект - класс провайдера или имя класса
// Приоритет - Число - Числовой приоритет выполнения провайдеры (по умолчанию 99)
// КлассОбъект - Объект - класс провайдера
// Приоритет - Число - числовой приоритет выполнения провайдера;
// меньшее значение читается первым (по умолчанию берётся из провайдера)
// ИдентификаторПровайдера - Строка - явный идентификатор; если не задан — берётся из Идентификатор() провайдера;
// при коллизии автоматически добавляется суффикс #2, #3 и т.д.
//
// Возвращаемое значение:
// Объект - переданный КлассОбъект (для цепочки настроек через .Настройки())
//
```

Пример использования с цепочкой настроек:
```bsl
МП.ДобавитьПровайдерПараметров(Новый ПровайдерПараметровENV, 2).Настройки()
.УстановитьПрефикс("APP_");
```

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

<a id="markdown-провайдерпоидентификатору" name="провайдерпоидентификатору"></a>
#### ПровайдерПоИдентификатору
```bsl
// Возвращает класс провайдера по идентификатору для прямой настройки
//
// Параметры:
// ИдентификаторПровайдера - Строка - идентификатор провайдера (например, "json", "yaml#2")
//
// Возвращаемое значение:
// Произвольный - класс провайдера или Неопределено если не найден
//
```

Пример:
```bsl
МП.ПровайдерПоИдентификатору("env").Настройки().УстановитьПрефикс("APP_");
```

<a id="markdown-настройкапоискафайла" name="настройкапоискафайла"></a>
#### НастройкаПоискаФайла
```bsl
Expand Down
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.11.1")
.Версия("0.12.0")
.Автор("Khorev Aleksey")
.АдресАвтора("Khorevaa@gmail.com")
.Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

Перем Префикс; // Строка - префикс фильтрации переменных среды

#Область Публичное_API

// Устанавливает префикс фильтрации переменных среды
//
// Параметры:
// ПрефиксФильтра - Строка - префикс
//
// Возвращаемое значение:
// НастройкиПровайдераENV - ссылка на текущий объект
//
Функция УстановитьПрефикс(Знач ПрефиксФильтра) Экспорт
Префикс = ПрефиксФильтра;
Возврат ЭтотОбъект;
КонецФункции

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

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

Процедура ПриСозданииОбъекта(НачальныйПрефикс = "")
Префикс = НачальныйПрефикс;
КонецПроцедуры
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
// Выполняет чтение параметров для провайдера
//
// Параметры:
// НастройкиПровайдера - Структура - структура настроек провайдера
// НастройкиПровайдера - Структура - (устарело) передаётся провайдеру как fallback
//
// Возвращаемое значение:
// Соответствие - результат чтения провайдера
//
Функция ПрочитатьПараметры(Знач НастройкиПровайдера) Экспорт
Функция ПрочитатьПараметры(Знач НастройкиПровайдера = Неопределено) Экспорт

Если Не Включен Тогда
Возврат Новый Соответствие;
Expand Down Expand Up @@ -52,6 +52,24 @@
Приоритет = НовыйПриоритет;
КонецПроцедуры

// Устанавливает идентификатор провайдера
//
// Параметры:
// НовыйИдентификатор - Строка - новый идентификатор провайдера
//
Процедура УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
Идентификатор = НовыйИдентификатор;
КонецПроцедуры

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

// Выполняет запись данных провайдера
//
// Параметры:
Expand Down Expand Up @@ -111,17 +129,11 @@
ИЛИ РеализованИнтерфейсЗаписи);

Если НЕ ПроверкаПровайдера Тогда
// TODO: Добавить описание того что реализовано а что нет
ВызватьИсключение "Не реализован необходимый интерфейс провайдера";
КонецЕсли;

ТипПровайдера = ВходящийКлассПровайдера.ТипПровайдера();

Если ЭтоФайловыйПровайдер() Тогда
КлассПровайдера = Новый ФайловыйПровайдерПараметров(ВходящийКлассПровайдера);
Иначе
КлассПровайдера = ВходящийКлассПровайдера;
КонецЕсли;
КлассПровайдера = ВходящийКлассПровайдера;

Приоритет = КлассПровайдера.Приоритет();
Идентификатор = КлассПровайдера.Идентификатор();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,15 @@
Перем Лог;
Перем Префикс;

Перем _Приоритет; // Число
Перем _Идентификатор; // Строка
Перем _Настройки; // НастройкиПровайдераENV

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

Expand All @@ -16,7 +23,20 @@
// Число - текущий приоритет провайдера
//
Функция Приоритет() Экспорт
Возврат 2;
Возврат _Приоритет;
КонецФункции

// Устанавливает приоритет провайдера
//
// Параметры:
// НовыйПриоритет - Число - приоритет
//
// Возвращаемое значение:
// Объект.ПровайдерПараметровENV - ссылка на текущий объект
//
Функция УстановитьПриоритет(Знач НовыйПриоритет) Экспорт
_Приоритет = НовыйПриоритет;
Возврат ЭтотОбъект;
КонецФункции

// Возвращает идентификатор провайдера
Expand All @@ -25,7 +45,20 @@
// Строка - текущий идентификатор провайдера
//
Функция Идентификатор() Экспорт
Возврат "env";
Возврат _Идентификатор;
КонецФункции

// Устанавливает идентификатор провайдера
//
// Параметры:
// НовыйИдентификатор - Строка - идентификатор
//
// Возвращаемое значение:
// Объект.ПровайдерПараметровENV - ссылка на текущий объект
//
Функция УстановитьИдентификатор(Знач НовыйИдентификатор) Экспорт
_Идентификатор = НовыйИдентификатор;
Возврат ЭтотОбъект;
КонецФункции

// Возвращает тип провайдера
Expand All @@ -37,17 +70,29 @@
Возврат "env";
КонецФункции

// Возвращает объект настроек провайдера
//
// Возвращаемое значение:
// НастройкиПровайдераENV - настройки
//
Функция Настройки() Экспорт
Возврат _Настройки;
КонецФункции

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

ЭффективныйПрефикс = _Настройки.ПолучитьПрефикс();

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

ПеременныеСреды = ПеременныеСреды();
ПрочитанныеПараметры = Новый Соответствие;
Expand All @@ -63,16 +108,16 @@

Результат = Новый Соответствие;

Если ПустаяСтрока(Префикс) Тогда
Если ПустаяСтрока(ЭффективныйПрефикс) Тогда
Результат = ПрочитанныеПараметры;
Иначе

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

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

Результат.Вставить(
Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - (СтрДлина(Префикс) + 1)),
Прав(ПеременнаяСреды.Ключ, СтрДлина(ПеременнаяСреды.Ключ) - (СтрДлина(ЭффективныйПрефикс) + 1)),
ПеременнаяСреды.Значение
);

Expand Down
Loading