Skip to content

Commit 02f761f

Browse files
authored
Merge pull request #139 from Segate-ekb/feature/advice
манипуляция провайдерами настроек через совет другого мастера
2 parents 7ef849f + b70acbe commit 02f761f

13 files changed

Lines changed: 1421 additions & 121 deletions

.github/workflows/perfomance.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
strategy:
1111
fail-fast: false
1212
matrix:
13-
oscript_version: ['dev', 'lts', 'default']
13+
oscript_version: ['dev', 'default']
1414
uses: autumn-library/workflows/.github/workflows/test.yml@main
1515
with:
1616
oscript_version: ${{ matrix.oscript_version }}

.github/workflows/testing.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
strategy:
1111
fail-fast: false
1212
matrix:
13-
oscript_version: ['dev', 'lts', 'default']
13+
oscript_version: ['dev', 'default']
1414
uses: autumn-library/workflows/.github/workflows/test.yml@main
1515
with:
1616
oscript_version: ${{ matrix.oscript_version }}

docs/api/050-Классы/20-СоветДругогоМастера.md

Lines changed: 28 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,22 @@ title: СоветДругогоМастера
44

55
# СоветДругогоМастера
66

7+
Объект-носитель пользовательских настроек, передаваемый в [`Поделка`](../../../api/050-Классы/) при её создании.
8+
9+
С версии 4.4 рекомендуется использовать [`СтроительМенеджераПараметров`](25-СтроительМенеджераПараметров.md), доступный через метод `ПолучитьСтроительМенеджераПараметров()`. Старые методы (`ЗначенияДеталек`, `ПрефиксПеременныхСреды`, `ИмяФайлаСоЗначениямиДеталек`, `ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек`) объявлены **устаревшими**: при их вызове в лог пишется предупреждение, под капотом они модифицируют тот же строитель.
10+
11+
## ПолучитьСтроительМенеджераПараметров
12+
13+
```bsl
14+
// Возвращает строитель с применёнными значениями устаревших полей.
15+
// Используется Поделкой при инициализации МенеджерПараметров.
16+
//
17+
// Возвращаемое значение:
18+
// СтроительМенеджераПараметров - готовый к использованию строитель
19+
//
20+
Функция ПолучитьСтроительМенеджераПараметров() Экспорт
21+
```
22+
723
## ПриСозданииОбъекта
824

925
```bsl
@@ -12,58 +28,34 @@ title: СоветДругогоМастера
1228
Процедура ПриСозданииОбъекта()
1329
```
1430

15-
## ЗначенияДеталек
31+
## ЗначенияДеталек <Badge type="warning" text="устарело" />
32+
33+
Используйте `ПолучитьСтроительМенеджераПараметров().ДобавитьПровайдерСоответствие(...)`.
1634

1735
```bsl
18-
// Установить/получить значения деталек.
19-
//
20-
// Параметры:
21-
// НовоеЗначение - Соответствие - устанавливаемые значения деталек.
22-
//
23-
// Возвращаемое значение:
24-
// Соответствие, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера.
25-
//
2636
Функция ЗначенияДеталек(НовоеЗначение = Неопределено) Экспорт
2737
```
2838

29-
## ПрефиксПеременныхСреды
39+
## ПрефиксПеременныхСреды <Badge type="warning" text="устарело" />
40+
41+
Используйте `ПолучитьСтроительМенеджераПараметров().Провайдер("env").Настройки().УстановитьПрефикс(...)`.
3042

3143
```bsl
32-
// Установить/получить префикс переменных среды, хранящих значения деталек.
33-
//
34-
// Параметры:
35-
// НовоеЗначение - Строка - устанавливаемый префикс переменных среды.
36-
//
37-
// Возвращаемое значение:
38-
// Строка, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера.
39-
//
4044
Функция ПрефиксПеременныхСреды(НовоеЗначение = Неопределено) Экспорт
4145
```
4246

43-
## ИмяФайлаСоЗначениямиДеталек
47+
## ИмяФайлаСоЗначениямиДеталек <Badge type="warning" text="устарело" />
48+
49+
Используйте `ПолучитьСтроительМенеджераПараметров().ПровайдерФайлов("default").УстановитьИмяФайла(...)`.
4450

4551
```bsl
46-
// Установить/получить имя файла (без расширения), в котором хранятся значения деталек.
47-
//
48-
// Параметры:
49-
// НовоеЗначение - Строка - устанавливаемое имя файла.
50-
//
51-
// Возвращаемое значение:
52-
// Строка, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера.
53-
//
5452
Функция ИмяФайлаСоЗначениямиДеталек(НовоеЗначение = Неопределено) Экспорт
5553
```
5654

57-
## ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек
55+
## ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек <Badge type="warning" text="устарело" />
56+
57+
Используйте `ПолучитьСтроительМенеджераПараметров().ПровайдерФайлов("default").ДобавитьСтандартныеКаталогиПоиска(...)`.
5858

5959
```bsl
60-
// Установить/получить относительный путь к каталогу, где хранятся файл со значениями деталек.
61-
//
62-
// Параметры:
63-
// НовоеЗначение - Строка - устанавливаемый путь к каталогу.
64-
//
65-
// Возвращаемое значение:
66-
// Строка, СоветДругогоМастера - Текущее установленное значение для гетера, ЭтотОбъект для сеттера.
67-
//
6860
Функция ДополнительныйКаталогПоискаФайлаСоЗначениямиДеталек(НовоеЗначение = Неопределено) Экспорт
6961
```
Lines changed: 236 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,236 @@
1+
---
2+
title: СтроительМенеджераПараметров
3+
---
4+
5+
# СтроительМенеджераПараметров
6+
7+
Инкапсулирует создание и настройку `МенеджерПараметров` (`configor`) с заранее заданным дефолтным составом провайдеров.
8+
9+
Создаётся лениво при первом обращении к [`СоветДругогоМастера.ПолучитьСтроительМенеджераПараметров()`](20-СоветДругогоМастера.md#получитьстроительменеджерапараметров) и кэшируется в `СоветДругогоМастера`: повторные вызовы возвращают тот же экземпляр, поэтому правки строителя, сделанные клиентским кодом, доходят до `Поделки`. Все настройки выполняются **до** передачи `СоветДругогоМастера` в [`Поделка`](../../../api/050-Классы/).
10+
11+
## Дефолтный состав провайдеров
12+
13+
| Идентификатор | Тип | Приоритет |
14+
| --- | --- | --- |
15+
| `env` | `ПровайдерПараметровENV` | 1 |
16+
| `default` | Файловый метапровайдер (`yaml` + `json` + `ini`)<br>имя файла `autumn-properties`, поиск с подкаталогом `src` | 2 |
17+
| `inline` | `ПровайдерПараметровСоответствие` | 3 |
18+
19+
Файловый метапровайдер регистрирует три физических провайдера в менеджере под идентификаторами `<база>-yaml`, `<база>-json`, `<база>-ini` с одинаковым приоритетом. Настройки, заданные через метапровайдер (имя файла, каталоги поиска и т.п.), транслируются во все три физических провайдера.
20+
21+
## Канонический нейминг
22+
23+
Методы добавления провайдеров следуют единой схеме `ДобавитьПровайдер<Тип>`:
24+
25+
| Метод | Назначение |
26+
| --- | --- |
27+
| `ДобавитьПровайдер` | универсальный — для произвольного класса-провайдера |
28+
| `ДобавитьПровайдерСоответствие` | inline-значения через `Соответствие` |
29+
| `ДобавитьПровайдерENV` | переменные среды |
30+
| `ДобавитьПровайдерФайлов` | мета-обёртка над несколькими форматами (`yaml`/`json`/`ini`) |
31+
| `ДобавитьПровайдерФайлНастроек` | один файл с автоопределением формата по расширению |
32+
33+
## Пример
34+
35+
```bsl
36+
Совет = Новый СоветДругогоМастера();
37+
Строитель = Совет.ПолучитьСтроительМенеджераПараметров();
38+
39+
// Заменить дефолтный inline-провайдер своим набором значений
40+
Значения = Новый Соответствие();
41+
Значения.Вставить("моя.настройка", "значение");
42+
Строитель.УдалитьПровайдер("inline");
43+
Строитель.ДобавитьПровайдерСоответствие(Значения, 3, "inline");
44+
45+
// Добавить ещё один файловый метапровайдер
46+
ДопФайлы = Строитель.ДобавитьПровайдерФайлов("dev", 1);
47+
ДопФайлы.УстановитьИмяФайла("autumn-properties.dev");
48+
49+
// Подключить конкретный файл (формат — по расширению)
50+
Строитель.ДобавитьПровайдерФайлНастроек("./config/local.yaml", 0, "local");
51+
52+
// Полностью пересобрать состав с нуля
53+
Строитель.ОчиститьПровайдеры();
54+
Строитель.ДобавитьПровайдерENV("MYAPP_", 1, "env");
55+
Строитель.ДобавитьПровайдерСоответствие(Значения, 2, "inline");
56+
57+
Поделка = Новый Поделка(Совет);
58+
```
59+
60+
## МенеджерПараметров
61+
62+
```bsl
63+
// Возвращает внутренний МенеджерПараметров configor.
64+
//
65+
// Возвращаемое значение:
66+
// МенеджерПараметров
67+
//
68+
Функция МенеджерПараметров() Экспорт
69+
```
70+
71+
## ДобавитьПровайдер
72+
73+
```bsl
74+
// Регистрирует произвольный класс-провайдер в менеджере.
75+
//
76+
// Параметры:
77+
// КлассПровайдера - Объект - класс, реализующий интерфейс провайдера configor
78+
// Приоритет - Число - приоритет
79+
// Идентификатор - Строка - явный идентификатор; при коллизии configor добавит #2, #3, ...
80+
//
81+
// Возвращаемое значение:
82+
// Объект - переданный КлассПровайдера
83+
//
84+
Функция ДобавитьПровайдер(Знач КлассПровайдера, Знач Приоритет = Неопределено, Знач Идентификатор = Неопределено) Экспорт
85+
```
86+
87+
## ДобавитьПровайдерСоответствие
88+
89+
```bsl
90+
// Регистрирует ПровайдерПараметровСоответствие с заданными значениями.
91+
//
92+
// Параметры:
93+
// Значения - Соответствие - значения параметров (по умолчанию пустое)
94+
// Приоритет - Число
95+
// Идентификатор - Строка
96+
//
97+
// Возвращаемое значение:
98+
// ПровайдерПараметровСоответствие
99+
//
100+
Функция ДобавитьПровайдерСоответствие(Знач Значения = Неопределено, Знач Приоритет = Неопределено, Знач Идентификатор = Неопределено) Экспорт
101+
```
102+
103+
## ДобавитьПровайдерENV
104+
105+
```bsl
106+
// Регистрирует ПровайдерПараметровENV.
107+
//
108+
// Параметры:
109+
// Префикс - Строка - префикс переменных среды
110+
// Приоритет - Число
111+
// Идентификатор - Строка
112+
//
113+
// Возвращаемое значение:
114+
// ПровайдерПараметровENV
115+
//
116+
Функция ДобавитьПровайдерENV(Знач Префикс = "", Знач Приоритет = Неопределено, Знач Идентификатор = Неопределено) Экспорт
117+
```
118+
119+
## ДобавитьПровайдерФайлов
120+
121+
```bsl
122+
// Регистрирует файловый метапровайдер — обёртку над несколькими физическими
123+
// файловыми провайдерами (yaml/json/ini) с одинаковым приоритетом.
124+
//
125+
// Параметры:
126+
// Идентификатор - Строка - базовый идентификатор метапровайдера
127+
// Приоритет - Число
128+
// Форматы - Строка - список форматов через пробел (по умолчанию "yaml json ini")
129+
//
130+
// Возвращаемое значение:
131+
// ФайловыйМетапровайдер
132+
//
133+
Функция ДобавитьПровайдерФайлов(Знач Идентификатор, Знач Приоритет, Знач Форматы = "yaml json ini") Экспорт
134+
```
135+
136+
## ДобавитьПровайдерФайлНастроек
137+
138+
```bsl
139+
// Регистрирует один файловый провайдер по конкретному пути к файлу.
140+
// Формат определяется по расширению (.yaml/.yml — yaml, .json — json, .ini — ini).
141+
//
142+
// Параметры:
143+
// ПутьКФайлу - Строка - полный или относительный путь к файлу настроек
144+
// Приоритет - Число
145+
// Идентификатор - Строка
146+
//
147+
// Возвращаемое значение:
148+
// Объект - класс-провайдер (ПровайдерПараметровYAML/JSON/INI)
149+
//
150+
Функция ДобавитьПровайдерФайлНастроек(Знач ПутьКФайлу, Знач Приоритет = Неопределено, Знач Идентификатор = Неопределено) Экспорт
151+
```
152+
153+
## УдалитьПровайдер
154+
155+
```bsl
156+
// Удаляет (отключает) провайдер по идентификатору.
157+
//
158+
// Если идентификатор соответствует файловому метапровайдеру —
159+
// отключает все его физические провайдеры и удаляет метапровайдер из реестра.
160+
//
161+
// Параметры:
162+
// Идентификатор - Строка
163+
//
164+
Процедура УдалитьПровайдер(Знач Идентификатор) Экспорт
165+
```
166+
167+
## ОчиститьПровайдеры
168+
169+
```bsl
170+
// Полностью очищает состав провайдеров: пересоздаёт МенеджерПараметров
171+
// и сбрасывает реестр файловых метапровайдеров.
172+
//
173+
// Полезно когда нужно собрать собственную композицию с нуля,
174+
// не наследуя дефолтный состав (env / default / inline).
175+
//
176+
Процедура ОчиститьПровайдеры() Экспорт
177+
```
178+
179+
## Провайдер
180+
181+
```bsl
182+
// Возвращает обёртку ПровайдерПараметров (configor) по идентификатору.
183+
//
184+
// Параметры:
185+
// Идентификатор - Строка
186+
//
187+
// Возвращаемое значение:
188+
// ПровайдерПараметров (обёртка configor) или Неопределено
189+
//
190+
Функция Провайдер(Знач Идентификатор) Экспорт
191+
```
192+
193+
## ПровайдерФайлов
194+
195+
```bsl
196+
// Возвращает зарегистрированный файловый метапровайдер.
197+
//
198+
// Параметры:
199+
// Идентификатор - Строка
200+
//
201+
// Возвращаемое значение:
202+
// ФайловыйМетапровайдер
203+
//
204+
Функция ПровайдерФайлов(Знач Идентификатор) Экспорт
205+
```
206+
207+
## НастройкаПоискаФайла
208+
209+
```bsl
210+
// Возвращает глобальный объект настроек поиска файлов МенеджерПараметров
211+
// (общий fallback для всех файловых провайдеров).
212+
//
213+
// Возвращаемое значение:
214+
// НастройкиФайловогоПровайдера
215+
//
216+
Функция НастройкаПоискаФайла() Экспорт
217+
```
218+
219+
## Файловый метапровайдер
220+
221+
Возвращается методами `ДобавитьПровайдерФайлов` / `ПровайдерФайлов`. Проксирует настройки сразу в физические провайдеры (`<база>-yaml`, `<база>-json`, `<база>-ini`).
222+
223+
Доступные методы:
224+
225+
- `Идентификатор()` — базовый идентификатор
226+
- `ИдентификаторыФизическихПровайдеров()` — фиксированный массив идентификаторов
227+
- `Форматы()` — фиксированный массив форматов
228+
- `Настройки(Формат)``НастройкиФайловогоПровайдера` конкретного физического провайдера
229+
- `УстановитьПриоритет(Приоритет)`
230+
- `УстановитьИмяФайла(Имя)`
231+
- `УстановитьФайлПараметров(Путь)`
232+
- `ДобавитьСтандартныеКаталогиПоиска(ВложенныйКаталог = "")`
233+
- `ДобавитьКаталогПоиска(Каталог)`
234+
- `ОчиститьПутиПоиска()`
235+
- `УстановитьВложенныйКаталогПоиска(ВложенныйКаталог)`
236+
- `Отключить()` / `Включить()`

docs/api/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
## Классы
5353

5454
* [СоветДругогоМастера](Классы/СоветДругогоМастера)
55+
* [СтроительМенеджераПараметров](Классы/СтроительМенеджераПараметров.md)
5556
* [Завязь](Классы/Завязь.md)
5657
* [Табакерка](Классы/Табакерка.md)
5758
* [ОпределениеЖелудя](Классы/ОпределениеЖелудя.md)

0 commit comments

Comments
 (0)