Skip to content

Commit

Permalink
Разрешены комментарии в json-файлах настройки #5
Browse files Browse the repository at this point in the history
  • Loading branch information
artbear committed Aug 27, 2017
1 parent 733d703 commit bd7e500
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 10 deletions.
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,15 @@ opm install params
}
```

+ Возможно использование обычных комментариев 1С

```json
{
// простой комментарий
"таймаут": 10 // комментарий-продолжение строки
}
```

### 2. Переопределение параметров

В случае необходимости переопределения параметров запуска используется схема приоритетов.
Expand Down
40 changes: 31 additions & 9 deletions src/Классы/ЧитательПараметров.os
Original file line number Diff line number Diff line change
Expand Up @@ -261,22 +261,44 @@
Функция ПрочитатьФайлJSON(Знач ИмяФайла)
Лог.Отладка("Путь файла настроек <%1>", ИмяФайла);

СообщениеОшибки = СтрШаблон("Файл настроек не существует. Путь <%1>", ИмяФайла);
JsonСтрока = ПрочитатьФайл(ИмяФайла, СообщениеОшибки);

Лог.Отладка("Текст файла настроек:
|%1", JsonСтрока);

JsonСтрока = ВырезатьКомментарииИзТекстаJSON(JsonСтрока);

ПарсерJSON = Новый ПарсерJSON();
Результат = ПарсерJSON.ПрочитатьJSON(JsonСтрока);

Возврат Результат;
КонецФункции

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

Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8);
JsonСтрока = Чтение.Прочитать();
Рез = Чтение.Прочитать();
Чтение.Закрыть();
Лог.Отладка("Текст файла настроек:");
Лог.Отладка(JsonСтрока);
Возврат Рез;
КонецФункции // ПрочитатьФайл()

ПарсерJSON = Новый ПарсерJSON();
Результат = ПарсерJSON.ПрочитатьJSON(JsonСтрока);
Функция ВырезатьКомментарииИзТекстаJSON(Знач JsonСтрока)

Возврат Результат;
КонецФункции
// вырезаем обычные комменты типа "// комментарий"
Регулярка = Новый РегулярноеВыражение("(^\/\/.*$)");
Рез = Регулярка.Заменить(JsonСтрока, "$0" );

// вырезаем комменты после строки, например, "строка //комментарий"
Регулярка = Новый РегулярноеВыражение("(^.*)(\/\/.*$)");
Рез = Регулярка.Заменить(Рез, "$1" );

Возврат Рез;
КонецФункции // ВырезатьКомментарииИзТекстаJSON()

Процедура ДополнитьАргументыИзФайлаНастроек(Знач Команда, ЗначенияПараметров, Знач НастройкиИзФайла)
Перем КлючПоУмолчанию, Настройки;
Expand Down
34 changes: 33 additions & 1 deletion tests/Параметры.os
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
СписокТестов.Добавить("Тест_ЧтениеПараметровИзПлоскогоФайлаБезКлючаПоУмолчанию");
СписокТестов.Добавить("Тест_ЧтениеПараметровИзПереданногоФайлаПоУмолчанию");
СписокТестов.Добавить("Тест_ЧтениеПараметровИзФайлаПоУмолчанию");
СписокТестов.Добавить("Тест_ЧтениеПараметровИзФайлаСКомментариями");
СписокТестов.Добавить("Тест_ПриоритетКоманднойСтрокиНадПараметрамиИзФайла");

СписокТестов.Добавить("Тест_ЧтениеПараметровКомандыИзКоманднойСтроки");
Expand Down Expand Up @@ -107,6 +108,38 @@
Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА);
КонецПроцедуры

Процедура Тест_ЧтениеПараметровИзФайлаСКомментариями() Экспорт
// ПараметрыСистемы.ИнициализироватьЛог("Отладка");
ИМЯ_НАСТРОЙКИ = "Настройки";
ИМЯ_ПАРАМЕТРА = "Параметр";
ЗНАЧЕНИЕ_ПАРАМЕТРА = 3;

ПутьФайлаНастроек = МенеджерВременныхФайлов.СоздатьФайл("json");

Парсер = Новый ПарсерАргументовКоманднойСтроки();
Парсер.ДобавитьПараметр(ИМЯ_НАСТРОЙКИ);
Парсер.ДобавитьИменованныйПараметр(ИМЯ_ПАРАМЕТРА);

СохранитьНастройкуВФайл(ПутьФайлаНастроек, СтрШаблон(
"{
| // простой комментарий
|""%1"": %2, // вложенный комментарий
|""ЗначениямиСоСлешами"" : ""не комментарий""
| }",
ИМЯ_ПАРАМЕТРА, ЗНАЧЕНИЕ_ПАРАМЕТРА) );

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

Параметры = ЧтениеПараметров.Прочитать(Парсер, ПараметрыКомСтроки, ИМЯ_НАСТРОЙКИ);

Ожидаем.Что(Параметры).ИмеетТип("Соответствие");
Ожидаем.Что(Параметры["Команда"]).Равно(Неопределено);
Ожидаем.Что(Параметры[ИМЯ_НАСТРОЙКИ]).Равно(ПутьФайлаНастроек);
Ожидаем.Что(Параметры[ИМЯ_ПАРАМЕТРА]).Равно(ЗНАЧЕНИЕ_ПАРАМЕТРА);
Ожидаем.Что(Параметры["ЗначениямиСоСлешами"]).Равно("не комментарий");
КонецПроцедуры

Процедура Тест_ЧтениеПараметровИзПереданногоФайлаПоУмолчанию() Экспорт
ИМЯ_ПАРАМЕТРА = "Параметр";
ЗНАЧЕНИЕ_ПАРАМЕТРА = 3;
Expand All @@ -132,7 +165,6 @@
КонецПроцедуры

Процедура Тест_ЧтениеПараметровИзФайлаПоУмолчанию() Экспорт
// ПараметрыСистемы.ИнициализироватьЛог("Отладка");
ИМЯ_ПАРАМЕТРА = "Параметр";
ЗНАЧЕНИЕ_ПАРАМЕТРА = 3;
ИМЯ_СКРИПТА = "test.os";
Expand Down

0 comments on commit bd7e500

Please sign in to comment.