Skip to content
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
16 changes: 16 additions & 0 deletions .github/workflows/do_we_love_dima.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Do we love Dima?

on:
push

jobs:
example-job:
name: Do we love Dima?
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2

- name: Show love for Dima
run: |
echo "Yes, we love Dima!"
Binary file added docs/UML.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/architecture_scheme.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
79 changes: 79 additions & 0 deletions docs/design_document.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Введение
## Назначение
Документ описывает архитектуру CLI-приложения в соответствии с IEEE 42010:2011 с целью обеспечения согласованности разработки, поддержки и расширения.
## Заинтересованные стороны
- Разработчики
- Пользователи

# Архитектурное описание
## Архитектурные представления
### Контекст системы
Приложение взаимодействует с:
- Пользователем (ввод команд)
- Операционной системой (выполнение внешних команд)
- Файловой системой (чтение и запись файлов)

### Логическое представление
Элементы архитектуры:
| Компонент | Описание |
|----------------|--------------------------------------------------------------------------|
| Environment | Хранит переменные окружения (map[string]string). |
| InputHandler | Считывает ввод в цикле, передает строки в Parser. |
| Parser | Разбивает команды на executor, подставляет переменные. |
| Executor | Запускает команды: встроенные (map[string]func) или внешние (os.Exec()). |

### Поведенческое представление
Взаимодействие элементов:
- InputHandler → Parser : Передача сырой командной строки.
- Environment → Parser : Передача запрашиваемых переменных окружения.
- Parser → Executor : Передача очереди команд с аргументами.
- Executor → Environment : Обновление переменных окружения.

### Представления разработки
- Диаграмма компонентов ([UML](UML.png) Component Diagram).
- Диаграмма последовательности ([Sequence Diagram](sequence_diagram.png)).

# Сопроводительная документация
## Руководство разработчика
### Executor: добавление встроенных команд
- Откройте файл internal/executor/commands.go
- Добавьте функцию с сигнатурой func(cmd parseline.Command, *bytes.Buffer) (*bytes.Buffer, error). Она должна принимать буфер, выполнять логику и возвращать модифицированный буфер или ошибку.
- Зарегистрируйте команду в функции newCommands.

### Environment
Управление переменными окружения. Требования:
- Реализовать конструктор для инициализации пустого хранилища переменных.
- Реализовать метод Set для установки переменной.
- Реализовать метод Get для получения значения переменной; если переменная не существует, вернуть ошибку.

### InputHandler
Считывает ввод пользователя и передает Parser. Требования:
- Реализовать бесконечный цикл для ввода через стандартный поток.
- Передавать полученную строку в Parser.

### Parser
Обрабатывает ввод на команды и аргументы, заменяет переменные окружения и строит pipeline. Требования:
- Разбивать строку на команды по символу |.
- Отделять имя команды от аргументов.
- Заменять переменные окружения из Environment.
- Возвращать структуру данных для последовательности команд.

### Executor
Выполняет команды последовательно. Требования:
- Принимать pipeline из Parser.
- Выполнять команды с использованием executor.
- Передавать результат в качестве входных данных для следующей команды.
- Выводить результат в конец выполнения в стандартный вывод и сообщать InputHandler.

## Руководство пользователя
- Встроенные команды: cat, echo, exit, pwd, wc.
- Команды объединяются в pipeline через |.
- Переменные не сохраняются между запусками.
- Встроенные команды поддерживают базовую функциональность.

## Тестирование
### Юнит-Тестирование
Необходимо для каждого компонента.

### Интеграционное тестирование
Тестирует pipeline полностью, проверяя корректность взаимодействия команд.
18 changes: 18 additions & 0 deletions docs/job_description.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Объекты

# Environment
Инициализируем при запуске приложения переменными окружения, подгрузка переменных с прошлого запуска пока не подразумевается. Хранит переменные в виде map[string]string. Обладает геттером и сеттером.

# InputHanlder
Занимается тем, что считывает строки пользователя в бесконечном цикле. Далее эти строки передаются Parser.

# Parser
Подставляем переменные окружения. Разбиваем строку по пайпам, отделяем команду от аргументов, добавляем в очередь вызовов.

# Executor
Идем по очереди. Получаем buffer с прошлого вызова, и вызываем запуск новой команды. После запуска последней команды, отправляет buffer в stdout и отчитывается перед InputHandler об окончании обработки команды.

Далее запускает переданную команду, добавляет/обновляет переменные откружения.
Имеет поле map[string]func(buffer)buffer для хранения команд. В случае отсутствия собственной реализации, выполняет запуск команды через os.Exec(). Парсинг аргументов происходит внутри самой команды. В случае отсутствия собственной реализации функции, парсинг не производиться.

Наша реализация CLI предполагает использование дополнительного потока только для обработки внешних сигналов(например: interrupt). Однако команды, запускаемые нашим CLI, могут использовать многопоточность без дополнительные ограничений от CLI.
Binary file added docs/sequence_diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.