Skip to content

Commit

Permalink
Merge pull request #1 from Macegor/develop
Browse files Browse the repository at this point in the history
Предрелиз
  • Loading branch information
Macegor authored Jan 14, 2025
2 parents de06735 + 1c28f93 commit b099c94
Show file tree
Hide file tree
Showing 24 changed files with 760 additions and 470 deletions.
7 changes: 2 additions & 5 deletions lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,7 @@
<class name="Шаблонизатор" file="src/Классы/Шаблонизатор.os"/>
<class name="Коннектор1С" file="src/Классы/Коннектор1С.os"/>
<class name="ГруппаОтбораКоннектора1С" file="src/Классы/ГруппаОтбораКоннектора1С.os"/>

<class name="МенеджерБазыДанных" file="src/Классы/МенеджерБазыДанных.os"/>
<class name="ТаблицаБазыДанных" file="src/Классы/ТаблицаБазыДанных.os"/>
<class name="ПользовтаельИнформационнойБазы" file="src/Классы/СлужебныеМодели/ПользовтаельИнформационнойБазы.os"/>


<module name="Лог" file="src/Модули/Лог.os"/>

<module name="ТипыМаршрутов" file="src/Модули/ТипыМаршрутов.os"/>
Expand All @@ -27,6 +23,7 @@

<module name="Настройки" file="src/Модули/Настройки.os"/>
<module name="Константы" file="src/Модули/Константы.os"/>
<module name="Коллекции" file="src/Модули/Коллекции.os"/>
<module name="Служебное" file="src/Модули/Служебное.os"/>
<module name="ВебСерверСлужебное" file="src/Модули/ВебСерверСлужебное.os"/>
<module name="Рефлексия" file="src/Модули/Рефлексия.os"/>
Expand Down
5 changes: 3 additions & 2 deletions packagedef
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
Описание.Имя("onecore")
.Версия("0.1.2")
.Версия("0.2.1")
.Автор("Андрей Савадеров (Macegor)")
.АдресАвтора("[email protected]")
.Описание("Фреймворк на движке onescript, созданный для разработки web-приложений любой сложности, используя компонентный подход.")
.ВерсияСреды("2.0.0.519")
.ВерсияСреды("2.0.0")
.ВключитьФайл("src")
.ВключитьФайл("lib.config")
.ВключитьФайл("LICENSE")
.ВключитьФайл("readme.md")
.ЗависитОт("json")
.ЗависитОт("strings")
.ЗависитОт("sql", "1.3.1.1")
.ЗависитОт("entity")
.ЗависитОт("cli")
.ЗависитОт("fs")
.ЗависитОт("logos")
Expand Down
389 changes: 322 additions & 67 deletions readme.md

Large diffs are not rendered by default.

20 changes: 20 additions & 0 deletions simple/empty/.vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
// Используйте IntelliSense, чтобы узнать о возможных атрибутах.
// Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
// Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Отладка 1Script",
"type": "oscript",
"request": "launch",
"program": "${workspaceRoot}/main.os",
"args": [],
"cwd": "${workspaceRoot}",
"env": {},
"runtimeExecutable": null,
"runtimeArgs": [],
"debugPort": 2801
}
]
}
12 changes: 12 additions & 0 deletions simple/empty/main.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#Использовать onecore

// Подключение функционала
Приложение.ИспользоватьORM();
Приложение.ПодключитьБазуДанныхORM("Основная", "КоннекторSQLite", "FullUri=file:main.db");

// Подключение компонентов
Приложение.ПодключитьКомпонент("Основной", "main", Истина);

// Инициализация и запуск
Приложение.Инициализировать();
Приложение.Запустить();
1 change: 1 addition & 0 deletions simple/empty/oscript.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lib.additional=./oscript_modules
14 changes: 14 additions & 0 deletions simple/empty/Основной/МодульКомпонента.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

Процедура ПриИнициализацииКомпонента() Экспорт

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

Процедура ПриФормированииМаршрутов(Маршруты) Экспорт

Маршруты.Добавить("/", "Главная");

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

Процедура ПриУстановкеПараметровСеанса(ПарметрыСеанса) Экспорт

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@

Перем Контекст;

Процедура Инициализация() Экспорт
Контекст.Данные.Вставить("Заголовок", "Главная");
КонецПроцедуры

&ФормироватьШаблон("Основной.Шаблоны.Главная")
Процедура GET() Экспорт

Контекст.Данные.Вставить("ВыводимыйТекст", Строка(ТекущаяДата()));

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{{ Вложить("Основной.Шапка") }}
<h1>{{Контекст.Данные.ВыводимыйТекст}}</h1>
{{ Вложить("Основной.Подвал") }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
</body>
</html>
8 changes: 8 additions & 0 deletions simple/empty/Основной/Шаблоны/Шапка.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{Контекст.Данные.Заголовок}}</title>
</head>
<body>
27 changes: 11 additions & 16 deletions src/Классы/Компонент.os
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
Перем ИмяЛатинское;
Перем ПутьКомпонента;
Перем МодульКомпонента;
Перем КлючиЗарегистрированныхМоделей;
Перем МоделиКомпонента;

Процедура ПриСозданииОбъекта(ИмяКомпонента, ИмяКомпонентаЛатинское, Отказ = Ложь)

Expand All @@ -13,7 +13,7 @@
КаталогПриложения = Служебное.КаталогПриложения();
ПутьКомпонента = ОбъединитьПути(КаталогПриложения, ИмяКомпонента);
ИмяМетодаИнициализации = "ПриИнициализацииКомпонента";
КлючиЗарегистрированныхМоделей = Новый Массив();
МоделиКомпонента = Новый Соответствие();

Если НЕ ФС.КаталогСуществует(ПутьКомпонента) Тогда
Лог.Отладка(СтрШаблон("Компонент ""%1"" не найден по пути: %2", ИмяКомпонента, ПутьКомпонента));
Expand Down Expand Up @@ -53,13 +53,11 @@
Возврат МодульКомпонента;
КонецФункции

Процедура ПодключитьМоделиКомпонента()

МенеджерБазыДанных = Приложение.МенеджерБазыДанных();
Функция МоделиКомпонента() Экспорт
Возврат МоделиКомпонента;
КонецФункции

Если МенеджерБазыДанных = Неопределено Тогда
Возврат;
КонецЕсли;
Процедура ПодключитьМоделиКомпонента()

МенеджерОбъектов = Приложение.МенеджерОбъектов();
ПутьКМоделям = ОбъединитьПути(ПутьКомпонента, "Модели");
Expand All @@ -77,16 +75,13 @@

Для каждого Файл Из ФайлыМоделей Цикл

Отказ = Ложь;
КлючОбъекта = Служебное.ПодготовитьКлючОбъекта(Файл, ПутьКМоделям);
МенеджерОбъектов.ЗарегистрироватьОбъект(Файл.ПолноеИмя, КлючОбъекта);

Если НЕ МенеджерБазыДанных.ОбъектЯвляетсяМоделью(МенеджерОбъектов.СоздатьОбъект(КлючОбъекта)) Тогда
Лог.Предупреждение(СтрШаблон("Модель ""%1"" не зарегистрирована", Файл.ИмяБезРасширения));
Продолжить;
КонецЕсли;
МенеджерОбъектов.ЗарегистрироватьОбъект(Файл.ПолноеИмя, КлючОбъекта, Истина, Отказ);

КлючиЗарегистрированныхМоделей.Добавить(КлючОбъекта);
Лог.Отладка(СтрШаблон("Зарегистрирована модель ""%1""", Файл.ИмяБезРасширения));
Если НЕ Отказ Тогда
МоделиКомпонента.Вставить(КлючОбъекта, МенеджерОбъектов.ТипПоКлючу(КлючОбъекта));
КонецЕсли;

КонецЦикла;

Expand Down
2 changes: 1 addition & 1 deletion src/Классы/Маршрутизатор.os
Original file line number Diff line number Diff line change
Expand Up @@ -205,4 +205,4 @@
Контекст.Ответ.Записать(ТекстОтвета);
КонецЕсли;

КонецПроцедуры
КонецПроцедуры
126 changes: 37 additions & 89 deletions src/Классы/Маршруты.os
Original file line number Diff line number Diff line change
Expand Up @@ -61,114 +61,63 @@

Функция НайтиМаршрут(Адрес) Экспорт

// TODO: Всё вот это чудо нужно рефакторить

// Разбиваем адрес на части
ЧастиМаршрута = СтрРазделить(Адрес, "/", Ложь);
КоличествоЧастейМаршрута = ЧастиМаршрута.Количество();

НайденныеСтроки = СписокМаршрутов.НайтиСтроки(Новый Структура("КоличествоЧастейМаршрута", КоличествоЧастейМаршрута));
// Ищем маршруты с таким же количеством частей
НайденныеМаршруты = СписокМаршрутов.НайтиСтроки(Новый Структура("КоличествоЧастейМаршрута", КоличествоЧастейМаршрута));

Если НЕ НайденныеСтроки.Количество() Тогда
Если НЕ НайденныеМаршруты.Количество() Тогда
Возврат Неопределено;
КонецЕсли;

ТаблицаСравнения = Новый ТаблицаЗначений();
ТаблицаСравнения.Колонки.Добавить("ОсновнойМаршрут", Новый ОписаниеТипов("Строка"));

ТаблицаРезультата = Новый ТаблицаЗначений();
ТаблицаРезультата.Колонки.Добавить("ИндексМаршрута", Новый ОписаниеТипов("Число"));
ТаблицаРезультата.Колонки.Добавить("КоличествоСхождений", Новый ОписаниеТипов("Число"));

Для Индекс = 1 По НайденныеСтроки.Количество() Цикл
ТаблицаСравнения.Колонки.Добавить("Маршрут" + Строка(Индекс), Новый ОписаниеТипов("Строка"));
НоваяСтрока = ТаблицаРезультата.Добавить();
НоваяСтрока.ИндексМаршрута = Индекс;
КонецЦикла;

Для каждого ЧастьМаршрута Из ЧастиМаршрута Цикл
НоваяСтрока = ТаблицаСравнения.Добавить();
НоваяСтрока.ОсновнойМаршрут = ЧастьМаршрута;
КонецЦикла;

ИндексМаршрута = 1;

Для каждого НайденныйМаршрут Из НайденныеСтроки Цикл

ЧастиНайденногоМаршрута = СтрРазделить(НайденныйМаршрут.Адрес, "/", Ложь);

ИндексЧастиМаршрута = 0;

Для каждого ЧастьНайденногоМаршрута Из ЧастиНайденногоМаршрута Цикл
НоваяСтрока = ТаблицаСравнения[ИндексЧастиМаршрута];
НоваяСтрока["Маршрут" + Строка(ИндексМаршрута)] = ЧастьНайденногоМаршрута;
ИндексЧастиМаршрута = ИндексЧастиМаршрута + 1;
КонецЦикла;
// Для каждого найденного маршрута проверяем совпадение частей
Для Каждого Маршрут Из НайденныеМаршруты Цикл
ЧастиНайденногоМаршрута = СтрРазделить(Маршрут.Адрес, "/", Ложь);
СовпаденийЧастей = 0;

ИндексМаршрута = ИндексМаршрута + 1;

КонецЦикла;

Для каждого СтрокаТаблицы Из ТаблицаСравнения Цикл

Для каждого Колонка Из ТаблицаСравнения.Колонки Цикл

Если Колонка.Имя = "ОсновнойМаршрут" Тогда
Для Индекс = 0 По КоличествоЧастейМаршрута - 1 Цикл
ЧастьТекущегоМаршрута = ЧастиМаршрута[Индекс];
ЧастьНайденногоМаршрута = ЧастиНайденногоМаршрута[Индекс];

Если ЧастьТекущегоМаршрута = ЧастьНайденногоМаршрута Тогда
СовпаденийЧастей = СовпаденийЧастей + 1;
Продолжить;
КонецЕсли;

Параметризируемый = СтрНачинаетсяС(СтрокаТаблицы[Колонка.Имя], "<");
ИндексМаршрута = Число(СтрЗаменить(Колонка.Имя, "Маршрут", ""));

НайденнаяСтрокаРезультата = ТаблицаРезультата.НайтиСтроки(Новый Структура("ИндексМаршрута", ИндексМаршрута));
НайденнаяСтрокаРезультата = НайденнаяСтрокаРезультата[0];

Если Параметризируемый Тогда
// Проверяем параметризованные части
Если СтрНачинаетсяС(ЧастьНайденногоМаршрута, "<") Тогда
ДанныеЧасти = ДанныеЧастиМаршрутаПараметром(ЧастьНайденногоМаршрута);

ЧастьМаршрута = СтрокаТаблицы[Колонка.Имя];

Если Не СтрНайти(ЧастьМаршрута, ":") Тогда
Если ДанныеЧасти = Неопределено Тогда
Продолжить;
КонецЕсли;

Если СтрокаТаблицы.ОсновнойМаршрут = ЧастьМаршрута Тогда
НайденнаяСтрокаРезультата.КоличествоСхождений = НайденнаяСтрокаРезультата.КоличествоСхождений + 1;
Продолжить;
КонецЕсли;

ОписаниеТипа = Новый ОписаниеТипов("Число");
Значение = ОписаниеТипа.ПривестиЗначение(СтрокаТаблицы.ОсновнойМаршрут);

Если Значение <> 0 Тогда
ТипОсновнойЧастиМаршрута = Тип("Число");
Иначе
ТипОсновнойЧастиМаршрута = Тип("Строка");
КонецЕсли;

ДанныеЧастиМаршрута = ДанныеЧастиМаршрутаПараметром(ЧастьМаршрута);

Если ТипОсновнойЧастиМаршрута = ДанныеЧастиМаршрута.Тип Тогда
НайденнаяСтрокаРезультата.КоличествоСхождений = НайденнаяСтрокаРезультата.КоличествоСхождений + 1;
КонецЕсли;

Иначе
Если СтрокаТаблицы.ОсновнойМаршрут = СтрокаТаблицы[Колонка.Имя] Тогда
НайденнаяСтрокаРезультата.КоличествоСхождений = НайденнаяСтрокаРезультата.КоличествоСхождений + 1;
// Проверяем соответствие типа параметра
Если ДанныеЧасти.Тип = Тип("Число") Тогда
Попытка
ЗначениеЧисло = Число(ЧастьТекущегоМаршрута);
Если ЗначениеЧисло <> 0 Тогда
СовпаденийЧастей = СовпаденийЧастей + 1;
КонецЕсли;
Исключение
Продолжить;
КонецПопытки;
ИначеЕсли ДанныеЧасти.Тип = Тип("Строка") Тогда
СовпаденийЧастей = СовпаденийЧастей + 1;
КонецЕсли;
КонецЕсли;

КонецЦикла;

// Если все части совпали - возвращаем найденный маршрут
Если СовпаденийЧастей = КоличествоЧастейМаршрута Тогда
Возврат Маршрут;
КонецЕсли;
КонецЦикла;

НайденныеСтрокиРезультата = ТаблицаРезультата.НайтиСтроки(Новый Структура("КоличествоСхождений", КоличествоЧастейМаршрута));

Если НайденныеСтрокиРезультата.Количество() Тогда
ИндексМаршрута = НайденныеСтрокиРезультата[0].ИндексМаршрута;
Возврат НайденныеСтроки[ИндексМаршрута - 1];
Иначе
Возврат Неопределено;
КонецЕсли;


Возврат Неопределено;

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

Функция ДанныеЧастиМаршрутаПараметром(Знач ЧастьМаршрута) Экспорт
Expand All @@ -188,7 +137,6 @@
КонецПопытки;

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

Функция АдресСвободен(Адрес)

НайденныеСтроки = СписокМаршрутов.НайтиСтроки(Новый Структура("Адрес", Адрес));
Expand Down
Loading

0 comments on commit b099c94

Please sign in to comment.