diff --git a/lib.config b/lib.config index a4d1a82..9b68cf3 100644 --- a/lib.config +++ b/lib.config @@ -6,6 +6,7 @@ + diff --git a/packagedef b/packagedef index e0ac507..893d7ad 100644 --- a/packagedef +++ b/packagedef @@ -1,5 +1,5 @@ Описание.Имя("cpdb") - .Версия("1.5.1") + .Версия("1.5.2") .ВерсияСреды("1.6.0") .ЗависитОт("logos") .ЗависитОт("1commands") diff --git "a/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\320\260\320\272\320\265\321\202\320\260.os" "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\320\260\320\272\320\265\321\202\320\260.os" new file mode 100644 index 0000000..c692541 --- /dev/null +++ "b/src/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\320\270\321\201\320\260\320\275\320\270\320\265\320\237\320\260\320\272\320\265\321\202\320\260.os" @@ -0,0 +1,251 @@ +////////////////////////////////////////////////////////////////////// +// Позаимствовано из пакета opm +// https://github.com/oscript-library/opm +// +////////////////////////////////////////////////////////////////////// +// +// Fluent-API для описания пакета +// +////////////////////////////////////////////////////////////////////// + +Перем мСвойстваПакета; +Перем мЗависимости; +Перем мМодули; +Перем мВключаемыеФайлы; +Перем мИсполняемыеФайлы; + +Перем ТипыМодулей Экспорт; + +////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +Функция Имя(Знач Параметр) Экспорт + УстановитьСвойствоПакета("Имя", Параметр); + Возврат ЭтотОбъект; +КонецФункции + +Функция Версия(Знач Параметр) Экспорт + УстановитьСвойствоПакета("Версия", Параметр); + Возврат ЭтотОбъект; +КонецФункции + +Функция Автор(Знач Параметр) Экспорт + УстановитьСвойствоПакета("Автор", Параметр); + Возврат ЭтотОбъект; +КонецФункции + +Функция Описание(Знач Параметр) Экспорт + УстановитьСвойствоПакета("Описание", Параметр); + Возврат ЭтотОбъект; +КонецФункции + +Функция АдресАвтора(Знач Параметр) Экспорт + УстановитьСвойствоПакета("АдресАвтора", Параметр); + Возврат ЭтотОбъект; +КонецФункции + +Функция ВерсияСреды(Знач Параметр) Экспорт + УстановитьСвойствоПакета("ВерсияСреды", Параметр); + Возврат ЭтотОбъект; +КонецФункции + +Функция ВерсияМанифеста(Знач Параметр) Экспорт + УстановитьСвойствоПакета("ВерсияМанифеста", Параметр); + Возврат ЭтотОбъект; +КонецФункции + +Функция ТочкаВхода(Знач Параметр) Экспорт + УстановитьСвойствоПакета("ТочкаВхода", Параметр); + Возврат ЭтотОбъект; +КонецФункции + +Функция Задачи(Знач Параметр) Экспорт + УстановитьСвойствоПакета("Задачи", Параметр); + Возврат ЭтотОбъект; +КонецФункции + +Функция Свойства() Экспорт + + // Проверка обязательных свойств + Если Не мСвойстваПакета.Свойство("Имя") или Не ЗначениеЗаполнено(мСвойстваПакета.Имя) Тогда + ВызватьИсключение "Не задано имя пакета"; + КонецЕсли; + + Если Не мСвойстваПакета.Свойство("Версия") или Не ЗначениеЗаполнено(мСвойстваПакета.Версия) Тогда + ВызватьИсключение "Не задана версия пакета"; + КонецЕсли; + + КопияСвойств = Новый Структура; + Для Каждого Свойство Из мСвойстваПакета Цикл + КопияСвойств.Вставить(Свойство.Ключ, Свойство.Значение); + КонецЦикла; + + Возврат КопияСвойств; + +КонецФункции + + +////////////////////////////////////////////////////////////////////// +// Зависимости + +Функция ЗависитОт(Знач ИмяПакета, Знач МинимальнаяВерсия = Неопределено, Знач МаксимальнаяВерсия = Неопределено) Экспорт + + Зависимость = Зависимость(ИмяПакета); + Если Зависимость = Неопределено Тогда + Зависимость = мЗависимости.Добавить(); + Зависимость.ИмяПакета = ИмяПакета; + КонецЕсли; + + Зависимость.ДляРазработки = Ложь; + + Если МинимальнаяВерсия = Неопределено Тогда + Возврат ЭтотОбъект; + КонецЕсли; + + Зависимость.МинимальнаяВерсия = МинимальнаяВерсия; + Зависимость.МаксимальнаяВерсия = МаксимальнаяВерсия; + + Возврат ЭтотОбъект; + +КонецФункции + +Функция РазработкаЗависитОт( + Знач ИмяПакета, + Знач МинимальнаяВерсия = Неопределено, + Знач МаксимальнаяВерсия = Неопределено) Экспорт + + Зависимость = Зависимость(ИмяПакета); + Если Зависимость = Неопределено Тогда + Зависимость = мЗависимости.Добавить(); + Зависимость.ИмяПакета = ИмяПакета; + Зависимость.ДляРазработки = Истина; + КонецЕсли; + + Если МинимальнаяВерсия = Неопределено Тогда + Возврат ЭтотОбъект; + КонецЕсли; + + Зависимость.МинимальнаяВерсия = МинимальнаяВерсия; + Зависимость.МаксимальнаяВерсия = МаксимальнаяВерсия; + + Возврат ЭтотОбъект; + +КонецФункции + +Функция Зависимость(Знач ИмяПакета) Экспорт + + Возврат мЗависимости.Найти(ИмяПакета, "ИмяПакета"); + +КонецФункции + +Функция Зависимости() Экспорт + Возврат мЗависимости.Скопировать(); +КонецФункции + +////////////////////////////////////////////////////////////////////// +// Модули пакета + +Функция ОпределяетКласс(Знач Идентификатор, Знач Файл) Экспорт + + ЗарегистрироватьМодульПакета(Идентификатор, Файл, ТипыМодулей.Класс); + Возврат ЭтотОбъект; + +КонецФункции + +Функция Классы() Экспорт + Возврат мМодули.Скопировать(Новый Структура("Тип", ТипыМодулей.Класс)); +КонецФункции + +Функция ОпределяетМодуль(Знач Идентификатор, Знач Файл) Экспорт + + ЗарегистрироватьМодульПакета(Идентификатор, Файл, ТипыМодулей.Модуль); + Возврат ЭтотОбъект; + +КонецФункции + +Функция Модули() Экспорт + Возврат мМодули.Скопировать(Новый Структура("Тип", ТипыМодулей.Модуль)); +КонецФункции + +Функция ВсеМодулиПакета() Экспорт + Возврат мМодули.Скопировать(); +КонецФункции + +Процедура ЗарегистрироватьМодульПакета(Знач Идентификатор, Знач Файл, Знач Тип) + УжеЕсть = мМодули.НайтиСтроки(Новый Структура("Идентификатор,Тип", Идентификатор, Тип)); + Если УжеЕсть.Количество() Тогда + ВызватьИсключение "Уже определен " + НРег(тип) + " с именем " + Идентификатор; + КонецЕсли; + + Объявление = мМодули.Добавить(); + Объявление.Идентификатор = Идентификатор; + Объявление.Файл = Файл; + Объявление.Тип = Тип; + +КонецПроцедуры + +////////////////////////////////////////////////////////////////////// +// Включаемые файлы + +Функция ВключитьФайл(Знач ИсходныйПуть) Экспорт + + мВключаемыеФайлы.Добавить(ИсходныйПуть); + Возврат ЭтотОбъект; + +КонецФункции + +Функция ВключаемыеФайлы() Экспорт + Возврат мВключаемыеФайлы; +КонецФункции + +////////////////////////////////////////////////////////////////////// +// Исполняемые файлы + +Функция ИсполняемыйФайл(Знач Путь, Знач ИмяПриложения = "") Экспорт + Стр = мИсполняемыеФайлы.Добавить(); + Стр.Путь = Путь; + Стр.ИмяПриложения = ИмяПриложения; + + Возврат ЭтотОбъект; +КонецФункции + +Функция ИсполняемыеФайлы() Экспорт + Возврат мИсполняемыеФайлы; +КонецФункции + +////////////////////////////////////////////////////////////////////// +// Вспомогательные функции + +Процедура УстановитьСвойствоПакета(Знач Имя, Знач Значение) + мСвойстваПакета.Вставить(Имя, Значение); +КонецПроцедуры + +////////////////////////////////////////////////////////////////////// +// + +Процедура Инициализация() + + мСвойстваПакета = Новый Структура; + + мЗависимости = Новый ТаблицаЗначений; + мЗависимости.Колонки.Добавить("ИмяПакета"); + мЗависимости.Колонки.Добавить("ДляРазработки", Новый ОписаниеТипов("Булево")); + мЗависимости.Колонки.Добавить("МинимальнаяВерсия"); + мЗависимости.Колонки.Добавить("МаксимальнаяВерсия"); + + мМодули = Новый ТаблицаЗначений; + мМодули.Колонки.Добавить("Идентификатор"); + мМодули.Колонки.Добавить("Файл"); + мМодули.Колонки.Добавить("Тип"); + + ТипыМодулей = Новый Структура("Класс,Модуль", "Класс", "Модуль"); + + мВключаемыеФайлы = Новый Массив; + + мИсполняемыеФайлы = Новый ТаблицаЗначений; + мИсполняемыеФайлы.Колонки.Добавить("Путь"); + мИсполняемыеФайлы.Колонки.Добавить("ИмяПриложения"); + +КонецПроцедуры + +Инициализация(); \ No newline at end of file diff --git "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" index 43c6773..fff744f 100644 --- "a/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" +++ "b/src/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -8,7 +8,6 @@ // ---------------------------------------------------------- #Использовать logos -#Использовать opm #Использовать tempfiles #Использовать fs @@ -159,7 +158,7 @@ ВнешнийКонтекст = Новый Структура("Описание", ОписаниеПакета); - ОбработчикСобытий = ЗагрузитьСценарий(ФайлМанифеста.ПолноеИмя, ВнешнийКонтекст); + ЗагрузитьСценарий(ФайлМанифеста.ПолноеИмя, ВнешнийКонтекст); Свойства = ОписаниеПакета.Свойства(); Свойства.Вставить("Классы", ОписаниеПакета.Классы()); diff --git a/src/lib.config b/src/lib.config index e790616..1079fd1 100644 --- a/src/lib.config +++ b/src/lib.config @@ -6,6 +6,7 @@ +