Skip to content
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

Возможность ограничения применения напильников на желуде #89

Merged
merged 13 commits into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .bsl-language-server.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"listOfIncorrectFirstSymbol": ";"
},
"Typo": {
"userWordsToIgnore": "Разворачиватель,Блестяшка,Блестяшек,Блестяшки,Блестяшками,Блестяшку,Блестяшкой,Инит,Структурочка,Запускатель,Осенизатор,Просканированные,Аппендера"
"userWordsToIgnore": "Разворачиватель,Блестяшка,Блестяшек,Блестяшки,Блестяшками,Блестяшку,Блестяшкой,Инит,Структурочка,Запускатель,Осенизатор,Прилеплятор,Просканированные,Аппендера"
}
}
}
Expand Down
16 changes: 2 additions & 14 deletions .github/workflows/qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,7 @@ jobs:
uses: autumn-library/workflows/.github/workflows/sonar.yml@coverage
with:
github_repository: autumn-library/autumn
codecov: true
secrets:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
coverage:
runs-on: ubuntu-latest
needs: [sonar]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
- name: Upload coverage reports to Codecov
uses: codecov/[email protected]
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: autumn-library/autumn

CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,32 @@ JSON обычно содержит вложенные объекты и масс

Метод обработки напильником возвращает желудь, причем не обязательно возвращать *тот же самый* желудь. Вам может захотеться обернуть его в объект-контейнер и накинуть на него несколько новых методов, например, с помощью [decorator](https://github.com/nixel2007/decorator).

Не каждый напильник стоит применять ко всем желудям. Вспоминая замечательный пример с панками, мы можем захотеть добавить напильник для полировки заклепок на напульсниках наших музыкантов. При этом очевидно, что далеко не все носят напульсники, да еще и с заклепками. В задаче ограничения применения напильника поможет повторяемый параметр аннотации `&Напильник` под названием `ПрименяетсяТолькоНа`. В нем можно указать имена или прозвища желудей, к которым применяется данный напильник.

```bsl
// file: Классы/ПолировщикЗаклепок.os

&Напильник(ПрименяетсяТолькоНа = "Панк")
Процедура ПриСозданииОбъекта()

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

С другой стороны сам желудь может захотеть ограничить список напильников, которые могут по нему вжухнуть. Или даже вовсе отключить вжухание всех напильников. Для этого на желудь можно навесить аннотацию `&ОсобоеОбращение`, которая может принимать булев параметр `ОтключитьВсеНапильники`, повторяемый строковый параметр `ПрименятьТолькоНапильник` и опять же повторяемый строковый параметр `НеПрименятьНапильник`. Назначение первого параметра, надеемся, достаточно очевидно, поэтому вот пример работы с одним из других:

```bsl
// file: Классы/ПозерВНапульсниках.os

&Желудь
&ОсобоеОбращение(
ПрименятьТолькоНапильник = "ПолировщикЗаклепок"
)
Процедура ПриСозданииОбъекта()
КонецПроцедуры
```

Зачем все это может быть нужно? Перфоманса ради, например. В случае большого количества компанейских желудей, которые не нуждаются в обработке напильником, можно отключить работу всех напильников для них. Ведь зачем тратить время на обработку, если она не нужна? При этом можно сохранить все плюшки от внедрения зависимостей и деталек через конструктор. Удобненько.

Напильник в этой удивительной осенней вселенной тоже является желудем, поэтому может иметь зависимости от других желудей. Но тут надо аккуратно - можно окончательно упороться и улететь таки на дно циклических зависимостей.

> Чтобы уберечь себя ото дна, все напильники инициализируются перед запуском приложения. Как в жизни - сначала разложил рядом инструменты, а потом начинаешь творить.
Comment on lines 759 to 790
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [1-1]

Возможно найдена орфографическая ошибка в заголовке документа. Рекомендуется проверить правильность написания.


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [8-8]

В начале предложения отсутствует заглавная буква. Правильно: "Осень…. прекрасная пора."


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [51-51]

В тексте встречается неоднозначное использование термина "ОСени" и "ОСень". Рекомендуется выбрать единый стиль написания для всего документа.


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [53-53]

В начале предложения отсутствует заглавная буква. Правильно: "Но! Шутки в сторону."


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [49-49]

Возможная опечатка: повтор слова "зависимостей". Рекомендуется переформулировать предложение для избежания повторения.


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [59-59]

Пропущен пробел между предложениями. Правильно: "...как добыть параметры конструирования, сколько их, в каком порядке они идут. Достаточно сказать..."


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [265-265]

Обнаружен повтор пробела. Рекомендуется удалить лишний пробел.

- Перем Логин;  будет внедрена в поле напрямую, а зависимость `Пароль` установлена через процедуру `УстановитьПароль`.
+ Перем Логин; будет внедрена в поле напрямую, а зависимость `Пароль` установлена через процедуру `УстановитьПароль`.

📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [514-514]

Пропущен пробел между предложениями. Правильно: "...поможет метод Поделка.НайтиЖелуди(): Панки = Поделка.НайтиЖелуди..."


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [977-977]

Пропущена запятая в сложном предложении: "как над свойствами, так и над методами". Правильно: "...всех имеющихся аннотаций как над свойствами, так и над методами."


📝 NOTE
This review was outside the diff hunks, and no overlapping diff hunk was found. Original lines [1002-1002]

В тексте встречается неоднозначное использование термина "ОСени" и "ОСень". Рекомендуется выбрать единый стиль написания для всего документа.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,38 @@
#Использовать asserts
#Использовать collectionos

Перем _ПрименяетсяТолькоНа;

Check warning on line 4 in src/internal/Классы/АннотацияНапильник.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/АннотацияНапильник.os#L4

Добавьте описание переменной
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавьте описание переменной _ПрименяетсяТолькоНа для улучшения читаемости кода. Это поможет другим разработчикам быстрее понять её назначение.


Функция МожетПрименятьсяНа(ОпределениеЖелудя) Экспорт

НапильникМожетПрименяться = Ложь;

Если _ПрименяетсяТолькоНа.Количество() = 0 Тогда
НапильникМожетПрименяться = Истина;
Иначе

Для Каждого Идентификатор Из ОпределениеЖелудя.Прозвища() Цикл
Если _ПрименяетсяТолькоНа.Содержит(Идентификатор) Тогда
НапильникМожетПрименяться = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

КонецЕсли;

Возврат НапильникМожетПрименяться;

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

&Аннотация("Напильник")
&Прозвище("Напильник")
Процедура ПриСозданииОбъекта(Значение = "")
Процедура ПриСозданииОбъекта(Значение = "", &Повторяемый ПрименяетсяТолькоНа = Неопределено)

_ПрименяетсяТолькоНа = Новый МножествоСоответствие();
Для Каждого МестоПрименения Из ПрименяетсяТолькоНа Цикл
Ожидаем.Что(МестоПрименения, "Ограничение применения напильника должно быть задано строкой").ИмеетТип("Строка");

_ПрименяетсяТолькоНа.Добавить(МестоПрименения);
КонецЦикла;

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#Использовать asserts

Перем _ОтключитьВсеНапильники;

Check warning on line 3 in src/internal/Классы/АннотацияОсобоеОбращение.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/АннотацияОсобоеОбращение.os#L3

Добавьте описание переменной
Перем _ПрименятьТолькоНапильники;

Check warning on line 4 in src/internal/Классы/АннотацияОсобоеОбращение.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/АннотацияОсобоеОбращение.os#L4

Добавьте описание переменной
Перем _НеПрименятьНапильники;

Check warning on line 5 in src/internal/Классы/АннотацияОсобоеОбращение.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/АннотацияОсобоеОбращение.os#L5

Добавьте описание переменной
Comment on lines +3 to +5
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавьте описания переменных _ОтключитьВсеНапильники, _ПрименятьТолькоНапильники, _НеПрименятьНапильники для улучшения читаемости кода.


Функция НапильникМожетПрименяться(ИмяНапильника) Экспорт

Если _ОтключитьВсеНапильники Тогда
Возврат Ложь;
КонецЕсли;

Если _ПрименятьТолькоНапильники.Количество() > 0 Тогда
Возврат _ПрименятьТолькоНапильники.Найти(ИмяНапильника) <> Неопределено;
Иначе
Возврат _НеПрименятьНапильники.Найти(ИмяНапильника) = Неопределено;
КонецЕсли;

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

&Аннотация("ОсобоеОбращение")
Процедура ПриСозданииОбъекта(
ОтключитьВсеНапильники = Ложь,
&Повторяемый ПрименятьТолькоНапильник = Неопределено,
&Повторяемый НеПрименятьНапильник = Неопределено
)

Для Каждого МестоПрименения Из ПрименятьТолькоНапильник Цикл
Ожидаем.Что(МестоПрименения, "Ограничение ""только"" применения напильника должно быть задано строкой")
.ИмеетТип("Строка");
КонецЦикла;

Для Каждого МестоПрименения Из НеПрименятьНапильник Цикл
Ожидаем.Что(МестоПрименения, "Ограничение ""не"" применения напильника должно быть задано строкой")
.ИмеетТип("Строка");
КонецЦикла;

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

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

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

_ОтключитьВсеНапильники = ОтключитьВсеНапильники;
_ПрименятьТолькоНапильники = ПрименятьТолькоНапильник;
_НеПрименятьНапильники = НеПрименятьНапильник;

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