Skip to content

Commit

Permalink
fix: Позаимствован класс ОписаниеПакета из приложения opm.
Browse files Browse the repository at this point in the history
  • Loading branch information
arkuznetsov committed Jan 6, 2024
1 parent edc5652 commit 3d8c5bf
Show file tree
Hide file tree
Showing 5 changed files with 255 additions and 3 deletions.
1 change: 1 addition & 0 deletions lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<class name="РаботаСЯндексДиск" file="src/core/Классы/РаботаСЯндексДиск.os"/>
<class name="РаботаСNextCloud" file="src/core/Классы/РаботаСNextCloud.os"/>
<class name="РаботаССерверомSSH" file="src/core/Классы/РаботаССерверомSSH.os"/>
<class name="ОписаниеПакета" file="src/core/Модули/ОписаниеПакета.os"/>
<module name="ПараметрыСистемы" file="src/core/Модули/ПараметрыСистемы.os"/>
<module name="РаботаСИБ" file="src/core/Модули/РаботаСИБ.os"/>
<module name="РаботаСФайлами" file="src/core/Модули/РаботаСФайлами.os"/>
Expand Down
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Описание.Имя("cpdb")
.Версия("1.5.1")
.Версия("1.5.2")
.ВерсияСреды("1.6.0")
.ЗависитОт("logos")
.ЗависитОт("1commands")
Expand Down
251 changes: 251 additions & 0 deletions src/core/Классы/ОписаниеПакета.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
//////////////////////////////////////////////////////////////////////
// Позаимствовано из пакета opm
// https://github.com/oscript-library/opm
//
//////////////////////////////////////////////////////////////////////
//
// Fluent-API для описания пакета
//
//////////////////////////////////////////////////////////////////////

Перем мСвойстваПакета;
Перем мЗависимости;
Перем мМодули;
Перем мВключаемыеФайлы;
Перем мИсполняемыеФайлы;

Перем ТипыМодулей Экспорт;

//////////////////////////////////////////////////////////////////////
// ПРОГРАММНЫЙ ИНТЕРФЕЙС

Функция Имя(Знач Параметр) Экспорт
УстановитьСвойствоПакета("Имя", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция Версия(Знач Параметр) Экспорт
УстановитьСвойствоПакета("Версия", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция Автор(Знач Параметр) Экспорт
УстановитьСвойствоПакета("Автор", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция Описание(Знач Параметр) Экспорт
УстановитьСвойствоПакета("Описание", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция АдресАвтора(Знач Параметр) Экспорт
УстановитьСвойствоПакета("АдресАвтора", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция ВерсияСреды(Знач Параметр) Экспорт
УстановитьСвойствоПакета("ВерсияСреды", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция ВерсияМанифеста(Знач Параметр) Экспорт
УстановитьСвойствоПакета("ВерсияМанифеста", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция ТочкаВхода(Знач Параметр) Экспорт
УстановитьСвойствоПакета("ТочкаВхода", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция Задачи(Знач Параметр) Экспорт
УстановитьСвойствоПакета("Задачи", Параметр);
Возврат ЭтотОбъект;
КонецФункции

Функция Свойства() Экспорт

// Проверка обязательных свойств
Если Не мСвойстваПакета.Свойство("Имя") или Не ЗначениеЗаполнено(мСвойстваПакета.Имя) Тогда
ВызватьИсключение "Не задано имя пакета";
КонецЕсли;

Если Не мСвойстваПакета.Свойство("Версия") или Не ЗначениеЗаполнено(мСвойстваПакета.Версия) Тогда
ВызватьИсключение "Не задана версия пакета";
КонецЕсли;

КопияСвойств = Новый Структура;
Для Каждого Свойство Из мСвойстваПакета Цикл
КопияСвойств.Вставить(Свойство.Ключ, Свойство.Значение);
КонецЦикла;

Возврат КопияСвойств;

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


//////////////////////////////////////////////////////////////////////
// Зависимости

Функция ЗависитОт(Знач ИмяПакета, Знач МинимальнаяВерсия = Неопределено, Знач МаксимальнаяВерсия = Неопределено) Экспорт

Зависимость = Зависимость(ИмяПакета);
Если Зависимость = Неопределено Тогда
Зависимость = мЗависимости.Добавить();
Зависимость.ИмяПакета = ИмяПакета;
КонецЕсли;

Зависимость.ДляРазработки = Ложь;

Если МинимальнаяВерсия = Неопределено Тогда
Возврат ЭтотОбъект;
КонецЕсли;

Зависимость.МинимальнаяВерсия = МинимальнаяВерсия;
Зависимость.МаксимальнаяВерсия = МаксимальнаяВерсия;

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

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

Функция РазработкаЗависитОт(
Знач ИмяПакета,
Знач МинимальнаяВерсия = Неопределено,
Знач МаксимальнаяВерсия = Неопределено) Экспорт

Зависимость = Зависимость(ИмяПакета);
Если Зависимость = Неопределено Тогда
Зависимость = мЗависимости.Добавить();
Зависимость.ИмяПакета = ИмяПакета;
Зависимость.ДляРазработки = Истина;
КонецЕсли;

Если МинимальнаяВерсия = Неопределено Тогда
Возврат ЭтотОбъект;
КонецЕсли;

Зависимость.МинимальнаяВерсия = МинимальнаяВерсия;
Зависимость.МаксимальнаяВерсия = МаксимальнаяВерсия;

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

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

Функция Зависимость(Знач ИмяПакета) Экспорт

Возврат мЗависимости.Найти(ИмяПакета, "ИмяПакета");

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

Функция Зависимости() Экспорт
Возврат мЗависимости.Скопировать();
КонецФункции

//////////////////////////////////////////////////////////////////////
// Модули пакета

Функция ОпределяетКласс(Знач Идентификатор, Знач Файл) Экспорт

ЗарегистрироватьМодульПакета(Идентификатор, Файл, ТипыМодулей.Класс);
Возврат ЭтотОбъект;

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

Функция Классы() Экспорт
Возврат мМодули.Скопировать(Новый Структура("Тип", ТипыМодулей.Класс));
КонецФункции

Функция ОпределяетМодуль(Знач Идентификатор, Знач Файл) Экспорт

ЗарегистрироватьМодульПакета(Идентификатор, Файл, ТипыМодулей.Модуль);
Возврат ЭтотОбъект;

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

Функция Модули() Экспорт
Возврат мМодули.Скопировать(Новый Структура("Тип", ТипыМодулей.Модуль));
КонецФункции

Функция ВсеМодулиПакета() Экспорт
Возврат мМодули.Скопировать();
КонецФункции

Процедура ЗарегистрироватьМодульПакета(Знач Идентификатор, Знач Файл, Знач Тип)
УжеЕсть = мМодули.НайтиСтроки(Новый Структура("Идентификатор,Тип", Идентификатор, Тип));
Если УжеЕсть.Количество() Тогда
ВызватьИсключение "Уже определен " + НРег(тип) + " с именем " + Идентификатор;
КонецЕсли;

Объявление = мМодули.Добавить();
Объявление.Идентификатор = Идентификатор;
Объявление.Файл = Файл;
Объявление.Тип = Тип;

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

//////////////////////////////////////////////////////////////////////
// Включаемые файлы

Функция ВключитьФайл(Знач ИсходныйПуть) Экспорт

мВключаемыеФайлы.Добавить(ИсходныйПуть);
Возврат ЭтотОбъект;

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

Функция ВключаемыеФайлы() Экспорт
Возврат мВключаемыеФайлы;
КонецФункции

//////////////////////////////////////////////////////////////////////
// Исполняемые файлы

Функция ИсполняемыйФайл(Знач Путь, Знач ИмяПриложения = "") Экспорт
Стр = мИсполняемыеФайлы.Добавить();
Стр.Путь = Путь;
Стр.ИмяПриложения = ИмяПриложения;

Возврат ЭтотОбъект;
КонецФункции

Функция ИсполняемыеФайлы() Экспорт
Возврат мИсполняемыеФайлы;
КонецФункции

//////////////////////////////////////////////////////////////////////
// Вспомогательные функции

Процедура УстановитьСвойствоПакета(Знач Имя, Знач Значение)
мСвойстваПакета.Вставить(Имя, Значение);
КонецПроцедуры

//////////////////////////////////////////////////////////////////////
//

Процедура Инициализация()

мСвойстваПакета = Новый Структура;

мЗависимости = Новый ТаблицаЗначений;
мЗависимости.Колонки.Добавить("ИмяПакета");
мЗависимости.Колонки.Добавить("ДляРазработки", Новый ОписаниеТипов("Булево"));
мЗависимости.Колонки.Добавить("МинимальнаяВерсия");
мЗависимости.Колонки.Добавить("МаксимальнаяВерсия");

мМодули = Новый ТаблицаЗначений;
мМодули.Колонки.Добавить("Идентификатор");
мМодули.Колонки.Добавить("Файл");
мМодули.Колонки.Добавить("Тип");

ТипыМодулей = Новый Структура("Класс,Модуль", "Класс", "Модуль");

мВключаемыеФайлы = Новый Массив;

мИсполняемыеФайлы = Новый ТаблицаЗначений;
мИсполняемыеФайлы.Колонки.Добавить("Путь");
мИсполняемыеФайлы.Колонки.Добавить("ИмяПриложения");

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

Инициализация();
3 changes: 1 addition & 2 deletions src/core/Модули/ПараметрыСистемы.os
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
// ----------------------------------------------------------

#Использовать logos
#Использовать opm
#Использовать tempfiles
#Использовать fs

Expand Down Expand Up @@ -159,7 +158,7 @@

ВнешнийКонтекст = Новый Структура("Описание", ОписаниеПакета);

ОбработчикСобытий = ЗагрузитьСценарий(ФайлМанифеста.ПолноеИмя, ВнешнийКонтекст);
ЗагрузитьСценарий(ФайлМанифеста.ПолноеИмя, ВнешнийКонтекст);

Свойства = ОписаниеПакета.Свойства();
Свойства.Вставить("Классы", ОписаниеПакета.Классы());
Expand Down
1 change: 1 addition & 0 deletions src/lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<class name="РаботаСЯндексДиск" file="core/Классы/РаботаСЯндексДиск.os"/>
<class name="РаботаСNextCloud" file="core/Классы/РаботаСNextCloud.os"/>
<class name="РаботаССерверомSSH" file="core/Классы/РаботаССерверомSSH.os"/>
<class name="ОписаниеПакета" file="core/Модули/ОписаниеПакета.os"/>
<module name="ПараметрыСистемы" file="core/Модули/ПараметрыСистемы.os"/>
<module name="РаботаСИБ" file="core/Модули/РаботаСИБ.os"/>
<module name="РаботаСФайлами" file="core/Модули/РаботаСФайлами.os"/>
Expand Down

0 comments on commit 3d8c5bf

Please sign in to comment.