-
Notifications
You must be signed in to change notification settings - Fork 13
Feature/korobka s detalkami #48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
Segate-ekb
wants to merge
25
commits into
oscript-library:master
Choose a base branch
from
Segate-ekb:feature/korobka-s-detalkami
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
25 commits
Select commit
Hold shift + click to select a range
4a96c9e
Добавлен ОписательДТО, аннотации Синоним и ЗначениеПоУмолчанию, тесты
Segate-ekb dd9f832
тесты
Segate-ekb 4cf1f04
Вложенные ДТО
Segate-ekb 4a6d087
Вложенные схемы
Segate-ekb 1b258be
фиксы по комментам
Segate-ekb e74efa2
bump annotations version
Segate-ekb 173e303
Добавлен каст типов
Segate-ekb d6d549b
переписал хранение реестра классов
Segate-ekb 7006b6f
Убрал определение аннотации и получаю просто по имени
Segate-ekb 230c2b2
fix
Segate-ekb 6e867f6
Инициализация вложенных дто
Segate-ekb 0957c33
фикс после ребейза
Segate-ekb 5a071ac
бамп версии
Segate-ekb 0014066
фикс теста для 2.1
Segate-ekb 39ad7de
Заменены длинные тире на дефисы в комментариях
nixel2007 4c7c849
Булево приводится по явному списку допустимых значений
nixel2007 5f7a26d
Рефлектор создаётся один раз на описание класса
nixel2007 40593ef
Имя класса вложенного DTO читается через объект аннотации
nixel2007 a5f319d
Заполнение вложенных и верхнеуровневых DTO сведено в одну рекурсию
nixel2007 830f5ac
Вложенный объект берётся у владельца в момент заполнения
nixel2007 cb5ff08
Вложенный DTO обязателен к инициализации в родительском DTO
nixel2007 c404536
Добавлены тесты приведения к типу Дата
nixel2007 68cdc2d
Удалены дублирующиеся тесты
nixel2007 116b19f
Из комментариев убраны неверные и внешние сведения
nixel2007 7fcf16f
Регистрация второго класса на занятый префикс падает с исключением.
Segate-ekb File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,88 @@ | ||
| // Описание одного поля DTO-класса, полученное из аннотаций свойства | ||
|
|
||
| Перем Имя Экспорт; // Строка - имя свойства класса | ||
| Перем Тип Экспорт; // Тип - целевой тип значения из аннотации Тип | ||
| Перем ЗначениеПоУмолчанию Экспорт; // Произвольный - значение по умолчанию | ||
| Перем Синоним Экспорт; // Строка - альтернативное имя ключа в конфигурации | ||
| Перем Обязательное Экспорт; // Булево - признак обязательности (нет ЗначениеПоУмолчанию) | ||
| Перем ОписанияВложенныхПолей Экспорт; // Массив из ОписаниеПоляДТО - описания полей вложенного DTO | ||
|
|
||
| // Конструктор описания поля | ||
| // | ||
| // Параметры: | ||
| // ИмяПоля - Строка - имя свойства класса | ||
| // | ||
| Процедура ПриСозданииОбъекта(Знач ИмяПоля) | ||
|
|
||
| Имя = ИмяПоля; | ||
| Тип = Неопределено; | ||
| ЗначениеПоУмолчанию = Неопределено; | ||
| Синоним = Неопределено; | ||
| Обязательное = Истина; | ||
| ОписанияВложенныхПолей = Неопределено; | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| // Устанавливает значение по умолчанию, делая поле необязательным | ||
| // | ||
| // Параметры: | ||
| // Значение - Произвольный - значение по умолчанию | ||
| // | ||
| Процедура УстановитьЗначениеПоУмолчанию(Знач Значение) Экспорт | ||
|
|
||
| ЗначениеПоУмолчанию = Значение; | ||
| Обязательное = Ложь; | ||
|
|
||
| КонецПроцедуры | ||
|
|
||
| // Устанавливает тип значения явно (из аннотации &Тип) | ||
| // | ||
| // Параметры: | ||
| // НовыйТип - Тип - целевой тип значения | ||
| // | ||
| Процедура УстановитьТип(Знач НовыйТип) Экспорт | ||
| Тип = НовыйТип; | ||
| КонецПроцедуры | ||
|
|
||
| // Устанавливает синоним поля | ||
| // | ||
| // Параметры: | ||
| // НовыйСиноним - Строка - альтернативное имя ключа в конфигурации | ||
| // | ||
| Процедура УстановитьСиноним(Знач НовыйСиноним) Экспорт | ||
| Синоним = НовыйСиноним; | ||
| КонецПроцедуры | ||
|
|
||
| // Помечает поле как вложенный DTO и сохраняет описания его полей | ||
| // | ||
| // Параметры: | ||
| // ОписанияПолей - Массив из ОписаниеПоляДТО - описания полей вложенного DTO | ||
| // | ||
| Процедура УстановитьВложенныйДТО(Знач ОписанияПолей) Экспорт | ||
| ОписанияВложенныхПолей = ОписанияПолей; | ||
| КонецПроцедуры | ||
|
|
||
| // Возвращает признак того, что поле является вложенным DTO | ||
| // | ||
| // Возвращаемое значение: | ||
| // Булево - Истина, если поле описано как вложенный DTO | ||
| // | ||
| Функция ЭтоВложенныйДТО() Экспорт | ||
| Возврат Не ОписанияВложенныхПолей = Неопределено; | ||
| КонецФункции | ||
|
|
||
| // Возвращает ключ для поиска в конфигурации | ||
| // Если задан синоним - возвращает его, иначе - имя свойства | ||
| // | ||
| // Возвращаемое значение: | ||
| // Строка - ключ для поиска в конфигурации | ||
| // | ||
| Функция КлючКонфигурации() Экспорт | ||
|
|
||
| Если Не Синоним = Неопределено Тогда | ||
| Возврат Синоним; | ||
| КонецЕсли; | ||
|
|
||
| Возврат Имя; | ||
|
|
||
| КонецФункции |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,96 @@ | ||
| #Использовать annotations | ||
| #Использовать reflector | ||
|
|
||
| Перем КонтейнерАннотаций; // КонтейнерАннотаций - определения поддерживаемых аннотаций | ||
|
|
||
| // Описывает класс DTO: читает аннотации экспортных свойств и возвращает массив описаний полей | ||
| // | ||
| // Параметры: | ||
| // КлассОбъект - Объект - экземпляр DTO-класса с аннотированными свойствами | ||
| // | ||
| // Возвращаемое значение: | ||
| // Массив из ОписаниеПоляДТО - массив описаний полей DTO | ||
| // | ||
| Функция ОписатьКласс(Знач КлассОбъект) Экспорт | ||
|
|
||
| РефлекторОбъекта = Новый РефлекторОбъекта(КлассОбъект); | ||
| Свойства = РефлекторОбъекта.ПолучитьТаблицуСвойств(Неопределено, Истина); | ||
|
|
||
| СтандартныйРефлектор = Новый Рефлектор; | ||
|
|
||
| ОписанияПолей = Новый Массив; | ||
|
|
||
| Для Каждого Свойство Из Свойства Цикл | ||
|
|
||
| Если Не Свойство.Экспорт Тогда | ||
| Продолжить; | ||
| КонецЕсли; | ||
|
|
||
| ОписаниеПоля = Новый ОписаниеПоляДТО(Свойство.Имя); | ||
|
|
||
| Для Каждого Аннотация Из Свойство.Аннотации Цикл | ||
|
|
||
| ИмяАннотации = Врег(Аннотация.Имя); | ||
|
|
||
| Если ИмяАннотации = "ТИП" Тогда | ||
| ЗначениеТипа = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация); | ||
| ОписаниеПоля.УстановитьТип(Тип(ЗначениеТипа)); | ||
| Продолжить; | ||
| КонецЕсли; | ||
|
|
||
| ОпределениеАннотации = КонтейнерАннотаций.ПолучитьОпределениеАннотации(Аннотация.Имя); | ||
|
|
||
| Если ОпределениеАннотации = Неопределено Тогда | ||
| Продолжить; | ||
| КонецЕсли; | ||
|
|
||
| ОбъектАннотации = ОпределениеАннотации.СоздатьОбъектАннотации(Аннотация); | ||
|
|
||
| Если ИмяАннотации = "ЗНАЧЕНИЕПОУМОЛЧАНИЮ" Тогда | ||
|
|
||
| ОписаниеПоля.УстановитьЗначениеПоУмолчанию(ОбъектАннотации.Значение()); | ||
|
|
||
| ИначеЕсли ИмяАннотации = "СИНОНИМ" Тогда | ||
|
|
||
| ОписаниеПоля.УстановитьСиноним(ОбъектАннотации.Синоним()); | ||
|
|
||
| ИначеЕсли ИмяАннотации = "ВЛОЖЕННЫЙДТО" Тогда | ||
|
|
||
| ВложенныйОбъект = СтандартныйРефлектор.ПолучитьСвойство(КлассОбъект, Свойство.Имя); | ||
|
|
||
| Если ВложенныйОбъект = Неопределено Тогда | ||
|
|
||
| ИмяКлассаДТО = ОбъектАннотации.ИмяКлассаДТО(); | ||
|
|
||
| Если ИмяКлассаДТО = "" Тогда | ||
| ВызватьИсключение "Свойство """ + Свойство.Имя + """ помечено как вложенный DTO," | ||
| + " но не инициализировано в конструкторе и класс не указан в аннотации"; | ||
| КонецЕсли; | ||
|
|
||
| ВложенныйОбъект = Новый(ИмяКлассаДТО); | ||
| СтандартныйРефлектор.УстановитьСвойство(КлассОбъект, Свойство.Имя, ВложенныйОбъект); | ||
|
|
||
| КонецЕсли; | ||
|
|
||
| ОписаниеПоля.УстановитьВложенныйДТО(ОписатьКласс(ВложенныйОбъект)); | ||
|
|
||
| КонецЕсли; | ||
|
|
||
| КонецЦикла; | ||
|
|
||
| ОписанияПолей.Добавить(ОписаниеПоля); | ||
|
|
||
| КонецЦикла; | ||
|
|
||
| Возврат ОписанияПолей; | ||
|
|
||
| КонецФункции | ||
|
|
||
| Процедура ПриСозданииОбъекта() | ||
|
|
||
| КонтейнерАннотаций = Новый КонтейнерАннотаций; | ||
| КонтейнерАннотаций.ДобавитьАннотацию(Тип("АннотацияЗначениеПоУмолчанию")); | ||
| КонтейнерАннотаций.ДобавитьАннотацию(Тип("АннотацияСиноним")); | ||
| КонтейнерАннотаций.ДобавитьАннотацию(Тип("АннотацияВложенныйДТО")); | ||
|
|
||
| КонецПроцедуры |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| Перем _ИмяКлассаДТО; // Строка - имя класса вложенного DTO, пустая строка если не указано | ||
|
|
||
| // Возвращает имя аннотации | ||
| // | ||
| // Возвращаемое значение: | ||
| // Строка - имя аннотации | ||
| // | ||
| Функция ИмяАннотации() Экспорт | ||
| Возврат "ВложенныйДТО"; | ||
| КонецФункции | ||
|
|
||
| // Возвращает имя класса вложенного DTO | ||
| // Пустая строка означает, что класс не указан и объект | ||
| // должен быть создан в конструкторе владеющего класса | ||
| // | ||
| // Возвращаемое значение: | ||
| // Строка - имя класса вложенного DTO | ||
| // | ||
| Функция ИмяКлассаДТО() Экспорт | ||
| Возврат _ИмяКлассаДТО; | ||
| КонецФункции | ||
|
|
||
| &Аннотация("ВложенныйДТО") | ||
| Процедура ПриСозданииОбъекта(Значение = "") Экспорт | ||
| _ИмяКлассаДТО = ?(Значение = Неопределено, "", Значение); | ||
| КонецПроцедуры | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| Перем _Значение; | ||
|
|
||
| // Возвращает имя аннотации | ||
| // | ||
| // Возвращаемое значение: | ||
| // Строка - имя аннотации | ||
| // | ||
| Функция ИмяАннотации() Экспорт | ||
| Возврат "ЗначениеПоУмолчанию"; | ||
| КонецФункции | ||
|
|
||
| // Возвращает значение по умолчанию | ||
| // | ||
| // Возвращаемое значение: | ||
| // Произвольный - значение по умолчанию | ||
| // | ||
| Функция Значение() Экспорт | ||
| Возврат _Значение; | ||
| КонецФункции | ||
|
|
||
| &Аннотация("ЗначениеПоУмолчанию") | ||
| Процедура ПриСозданииОбъекта(Значение) Экспорт | ||
| _Значение = Значение; | ||
| КонецПроцедуры |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| Перем _Синоним; | ||
|
|
||
| // Возвращает имя аннотации | ||
| // | ||
| // Возвращаемое значение: | ||
| // Строка - имя аннотации | ||
| // | ||
| Функция ИмяАннотации() Экспорт | ||
| Возврат "Синоним"; | ||
| КонецФункции | ||
|
|
||
| // Возвращает синоним (альтернативное имя ключа в конфигурации) | ||
| // | ||
| // Возвращаемое значение: | ||
| // Строка - синоним свойства | ||
| // | ||
| Функция Синоним() Экспорт | ||
| Возврат _Синоним; | ||
| КонецФункции | ||
|
|
||
| &Аннотация("Синоним") | ||
| Процедура ПриСозданииОбъекта(Значение) Экспорт | ||
| _Синоним = Значение; | ||
| КонецПроцедуры |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.