Skip to content

Commit

Permalink
Finish 0.5.3
Browse files Browse the repository at this point in the history
  • Loading branch information
khorevaa committed Jul 13, 2018
2 parents 9d7f4b3 + 87ba7bb commit ca051a3
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 97 deletions.
2 changes: 1 addition & 1 deletion features/step_definitions/constructor.os
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@
Процедура ЯСоздаюНовыеПараметрыСИменемИСохраняюВ(Знач ИмяКонструктораПараметров, Знач ИмяПеременной) Экспорт

МенеджерПараметров = БДД.ПолучитьИзКонтекста("МенеджерПараметров");
ПараметрОбъект = МенеджерПараметров.НовыйКонструкторПараметров(ИмяКонструктораПараметров);
ПараметрОбъект = МенеджерПараметров.НовыйКонструкторПараметров();

БДД.СохранитьВКонтекст(ИмяПеременной, ПараметрОбъект);

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.5.2")
.Версия("0.5.3")
.Автор("Khorev Aleksey")
.АдресАвтора("[email protected]")
.Описание("Библиотека для работы с конфигурационными файлами в формате json, yaml")
Expand Down
98 changes: 20 additions & 78 deletions src/Классы/КонструкторПараметров.os
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@
Перем Лог;

Перем Настройки; // Соответствие
Перем НаименованиеПараметров; // Строка
Перем СинонимыПараметров; // Массив строка
Перем ИндексПолей; // Соответствие ключа и типа элемента массива
Перем ИндексСинонимовПолей; // Соответствие синонимов полей и наименования полей
Перем ИндексПараметров; // Соответствие текущий настроек
Перем КонструкторИспользован; // Булево, признак использования объекта при чтении из соответсвтия
Перем ИнтерфейсКонструктора; // Класс объект ИнтерфейсОбъекта
Перем МожетСодержатьПроизвольныеПоля; // Булево, признак возможность не указывать поля
Expand All @@ -18,30 +16,17 @@

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

НовыйЭлемент = Новый КонструкторПараметров(ИндексПараметров, НовоеНаименованиеПараметров);
НовыйЭлемент = Новый КонструкторПараметров();

Возврат НовыйЭлемент;

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

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

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

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

// (Заготовка) Устанавливает дополнительное наименование узла параметров
//
Expand All @@ -58,24 +43,6 @@

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

// Устанавливает новое наименование параметров
//
// Параметры:
// НовоеНаименованиеПараметров - Строка - новое наименование текущего класса параметров
//
// Возвращаемое значение:
// Объект.КонструкторПараметров - ссылка на текущий элемент класса <КонструкторПараметров>
//
Функция Наименование(НовоеНаименованиеПараметров) Экспорт

НаименованиеПараметров = НовоеНаименованиеПараметров;

ИндексПараметров.Вставить(НаименованиеПараметров, ЭтотОбъект);

Возврат ЭтотОбъект;

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

// Выполняет заполнение описания параметров из произвольного объекта
//
// Параметры:
Expand All @@ -86,21 +53,13 @@
//
Функция ИзКласса(КлассОбъект) Экспорт

НовоеНаименованиеПараметров = Строка(ТипЗнч(КлассОбъект));

РефлекторОбъекта = Новый РефлекторОбъекта(КлассОбъект);
РезультатПроверки = РефлекторОбъекта.РеализуетИнтерфейс(ИнтерфейсКонструктора);

Если Не РезультатПроверки Тогда
ВызватьИсключение СтрШаблон("Класс <%1> не реализовывает интерфейс <%2>", КлассОбъект, ИнтерфейсКонструктора);
КонецЕсли;

Если РефлекторОбъекта.ЕстьФункция("ПолучитьНаименованиеПараметров") Тогда
НовоеНаименованиеПараметров = КлассОбъект.ПолучитьНаименованиеПараметров();
КонецЕсли;

Наименование(НовоеНаименованиеПараметров);

КлассОбъект.ОписаниеПараметров(ЭтотОбъект);

Возврат ЭтотОбъект;
Expand All @@ -109,16 +68,13 @@

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

Лог.Отладка("Выполняю копирование элемента <%1> -> <%2>", НаименованиеПараметров, НовоеНаименованиеПараметров);
НовыйЭлемент = НовыеПараметры(НовоеНаименованиеПараметров);
Лог.Отладка("Выполняю копирование элемента конструтор парамеров");
НовыйЭлемент = НовыеПараметры();

Если МожетСодержатьПроизвольныеПоля Тогда
НовыйЭлемент.ПроизвольныеПоля();
Expand Down Expand Up @@ -247,15 +203,19 @@

Если Тип("ПолеКонструктораПараметров") = ТипЗнч(ОбъектПоля) Тогда

ОбъектПоля = ОбъектПоля.Конструктор();
ОбъектПоля = ОбъектПоля.Конструктор().Скопировать();

ИначеЕсли НЕ Тип("КонструкторПараметров") = ТипЗнч(ОбъектПоля) Тогда

ОбъектПоля = ПолучитьПолеПараметров(ОбъектПоля);

Иначе

ОбъектПоля = ОбъектПоля.Скопировать();

КонецЕсли;

Лог.Отладка("Добавляю поле объект <%1>, <%2>, <%3>", ИмяПоля, ТипПоля, ОбъектПоля.ПолучитьНаименованиеПараметров());
Лог.Отладка("Добавляю поле объект <%1>, <%2>", ИмяПоля, ТипПоля);

Возврат Поле(ИмяПоля, ТипПоля, ОбъектПоля, , ОбъектПоля);

Expand Down Expand Up @@ -420,8 +380,6 @@

КонструкторИспользован = Истина;

Лог.Отладка("Читаю настройки <%1>", НаименованиеПараметров);

ПрочитатьИзСоответствия(ВходящиеСоответствие);

ПоказатьНастройкиВРежимеОтладки(Настройки);
Expand Down Expand Up @@ -478,11 +436,17 @@

ОписаниеПоля = КлассПоля.ОписаниеПоля();

Если ТипЗнч(ОписаниеПоля.ОбъектЭлемента) = Тип("КонструкторПараметров") Тогда
ОбъектЭлемента = ОписаниеПоля.ОбъектЭлемента.Скопировать();
Иначе
ОбъектЭлемента = ОписаниеПоля.ОбъектЭлемента;
КонецЕсли;

НовыйЭлемент.Поле(ОписаниеПоля.Имя,
ОписаниеПоля.Тип,
ОписаниеПоля.ЗначениеПоУмолчанию,
ОписаниеПоля.ТипЭлемента,
ОписаниеПоля.ОбъектЭлемента
ОбъектЭлемента
);

КонецЦикла;
Expand All @@ -509,26 +473,14 @@
ВызватьИсключение СтрШаблон("Класс <%1> не реализовывает интерфейс <%2>", КлассОбъект, ИнтерфейсКонструктора);
КонецЕсли;

Если РефлекторОбъекта.ЕстьФункция("ПолучитьНаименованиеПараметров") Тогда
ИмяПараметров = КлассОбъект.ПолучитьНаименованиеПараметров();
КонецЕсли;

Если ПараметрЕстьВИндексе(ИмяПараметров) Тогда
Возврат ИндексПараметров[ИмяПараметров];
КонецЕсли;

КонструкторПараметровКласса = НовыеПараметры(ИмяПараметров);
КонструкторПараметровКласса = НовыеПараметры();

КлассОбъект.ОписаниеПараметров(КонструкторПараметровКласса);

Возврат КонструкторПараметровКласса;

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

Функция ПараметрЕстьВИндексе(Знач ИмяПараметров)
Возврат НЕ ИндексПараметров[ИмяПараметров] = Неопределено;
КонецФункции

Функция ЗначениеВСоответствие(Значение)

ТипЗначения = ТипЗнч(Значение);
Expand Down Expand Up @@ -704,21 +656,11 @@

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

Процедура ПриСозданииОбъекта(ВходящийИндексПараметров, Знач НовоеНаименованиеПараметров)
Процедура ПриСозданииОбъекта()

НаименованиеПараметров = НовоеНаименованиеПараметров;
Настройки = Новый Соответствие;
ИндексПолей = Новый Соответствие;
ИндексСинонимовПолей = Новый Соответствие;
ИндексПараметров = ВходящийИндексПараметров;

Если ИндексПараметров = Неопределено Тогда
ИндексПараметров = Новый Соответствие;
КонецЕсли;

Если ЗначениеЗаполнено(НаименованиеПараметров) Тогда
ИндексПараметров.Вставить(НаименованиеПараметров, ЭтотОбъект);
КонецЕсли;

КонструкторИспользован = Ложь;
МожетСодержатьПроизвольныеПоля = Ложь;
Expand Down
9 changes: 3 additions & 6 deletions src/Классы/МенеджерПараметров.os
Original file line number Diff line number Diff line change
Expand Up @@ -252,16 +252,15 @@
// Создает и возвращает новый конструктор параметров
//
// Параметры:
// ИмяКонструктора - Строка - наименование конструктора параметров
// КлассОбъект - Объект - Класс объект реализующий интерфейс конструктора параметров
//
// Возвращаемое значение:
// Объект.КонструкторПараметров - ссылка на новый элемент класса <КонструкторПараметров>
//
Функция НовыйКонструкторПараметров(ИмяКонструктора, КлассОбъект = Неопределено) Экспорт
Функция НовыйКонструкторПараметров(КлассОбъект = Неопределено) Экспорт

ВнутреннийКонструкторПараметров = КонструкторПараметров();
КонструкторПараметров = ВнутреннийКонструкторПараметров.НовыеПараметры(ИмяКонструктора);
КонструкторПараметров = ВнутреннийКонструкторПараметров.НовыеПараметры();

Если ЗначениеЗаполнено(КлассОбъект) Тогда

Expand All @@ -279,9 +278,7 @@

Функция ПолучитьКонструкторПараметров()

ИндексПараметровКонструктора = Новый Соответствие;

Конструктор = Новый КонструкторПараметров(ИндексПараметровКонструктора, "ОсновнаяНастройка");
Конструктор = Новый КонструкторПараметров();

Возврат Конструктор;

Expand Down
12 changes: 12 additions & 0 deletions tests/fixtures/test-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
owner:
contact:
email: mail.ru
tel: 77777777

admin:
contact:
email: admin.ru

person:
address: home

8 changes: 4 additions & 4 deletions tests/fixtures/ТестовыйКласс.os
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,21 @@

Процедура ОписаниеПараметров(Знач Конструктор) Экспорт

ПараметрСоответствиеСтруктуры = Конструктор.НовыеПараметры("ПараметрСоответствиеСтруктуры")
ПараметрСоответствиеСтруктуры = Конструктор.НовыеПараметры()
.ПолеСтрока("КлючВнутри1")
.ПолеСтрока("КлючВнутри2")
;

ПараметрСтруктураВнутри = Конструктор.НовыеПараметры("ПараметрСоответствиеСтруктуры")
ПараметрСтруктураВнутри = Конструктор.НовыеПараметры()
.ПолеСтрока("Ключ1")
.ПолеСтрока("Ключ2")
;
ПараметрСоответствие = Конструктор.НовыеПараметры("ПараметрСоответствие")
ПараметрСоответствие = Конструктор.НовыеПараметры()
.ПолеСтрока("Ключ1")
.ПолеСтрока("Ключ2")
;

ПараметрСтруктура = Конструктор.НовыеПараметры("ВложеннаяСтруктура")
ПараметрСтруктура = Конструктор.НовыеПараметры()
.ПолеСтрока("Строка")
.ПолеДата("Дата")
.ПолеЧисло("Число")
Expand Down
Loading

0 comments on commit ca051a3

Please sign in to comment.