PHPackages                             masyasmv/otus-macro-commands - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. masyasmv/otus-macro-commands

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

masyasmv/otus-macro-commands
============================

Macro commands implementation for Otus course

v1.0.0(9mo ago)03MITPHPPHP ^8.3CI passing

Since Jul 16Pushed 9mo agoCompare

[ Source](https://github.com/MasyaSmv/otus_macro-commands)[ Packagist](https://packagist.org/packages/masyasmv/otus-macro-commands)[ RSS](/packages/masyasmv-otus-macro-commands/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (3)Used By (0)

Otus Macro Commands 🚀
=====================

[](#otus-macro-commands-)

[![tests](https://github.com/MasyaSmv/otus_macro-commands/actions/workflows/tests.yml/badge.svg)](https://github.com/MasyaSmv/otus_macro-commands/actions/workflows/tests.yml)[![PHP](https://camo.githubusercontent.com/f6ad19794a42de87b799351a3aa66ee874409e5b923d42b6a226a8d75a6a9ad1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e332d3838393242462e7376673f6c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://www.php.net/releases/8.3/en.php)[![License](https://camo.githubusercontent.com/89d9336727e9579e919e513d9e222646e9117feecf5a1a158ed3ae4fd4bbca09/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f4d61737961536d762f6f7475735f6d6163726f2d636f6d6d616e64732e737667)](LICENSE)

Учебный мини-фреймворк для шаблона **Command** с поддержкой:
------------------------------------------------------------

[](#учебный-мини-фреймворк-для-шаблона-command-с-поддержкой)

- **MoveCommand / RotateCommand** — базовые действия (переместить, повернуть).
- **CheckFuelCommand / BurnFuelCommand** — расход топлива с проверкой остатка.
- **MacroCommand** — цепочка команд c атомарным выполнением (останавливается и прокидывает `CommandException` при ошибке).
- **ChangeVelocityCommand** — пересчёт вектора мгновенной скорости после поворота.

Пример макрокоманд в игре «Космическая битва»:

```
$move = new MacroCommand(
    new CheckFuelCommand(5),   // 1) есть ли топливо?
    new MoveCommand(1),        // 2) сдвигаемся
    new BurnFuelCommand(5)     // 3) вычитаем расход
);

$rotate = new MacroCommand(
    new RotateCommand($rotator, 30.0),     // меняет угол
    new ChangeVelocityCommand(30.0)        // и вектор скорости
);
```

📦 Установка
-----------

[](#-установка)

```
Копировать
Редактировать
git clone https://github.com/MasyaSmv/otus_macro-commands.git
cd otus_macro-commands
composer install
```

🚀 Быстрый старт
---------------

[](#-быстрый-старт)

```
use Masyasmv\OtusMacroCommands\Command\{MoveCommand, CheckFuelCommand, BurnFuelCommand, MacroCommand};
use Masyasmv\OtusMacroCommands\Model\Ship;

$ship = new Ship();           // реализует Positionable, VelocityAware, Rotatable, FuelTankAware
$ship->refillFuel(100);

$moveForward = new MacroCommand(
    new CheckFuelCommand(10),
    new MoveCommand(1),
    new BurnFuelCommand(10)
);

$moveForward->execute($ship);
```

🗂️ Структура
------------

[](#️-структура)

```
src/
├── Command/         // все команды (+ исключения)
├── Contract/        // маленькие интерфейсы (Positionable, Rotatable ...)
├── Service/         // Mover, Rotator, FuelTank и т. д.
└── ValueObject/     // Vector2D, etc.
tests/               // PHPUnit-тесты
```

### 🧪 Тесты

[](#-тесты)

```
# юнит‐тесты
composer test

# отчёт покрытия (HTML в папке coverage/)
composer test-coverage
```

🔧 CI
----

[](#-ci)

В проекте лежит настроенный workflow .github/workflows/ci.yml — он устанавливает PHP 8.3, тянет зависимости и запускает «composer test».

📜 Лицензия
----------

[](#-лицензия)

Код распространяется под лицензией MIT — см. LICENSE.

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance56

Moderate activity, may be stable

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

299d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f29a405df86487468d199f9525b44185d3bd3a81ccca962f75e0517a9ea44682?d=identicon)[MasyaSmv](/maintainers/MasyaSmv)

---

Top Contributors

[![MasyaSmv](https://avatars.githubusercontent.com/u/61746307?v=4)](https://github.com/MasyaSmv "MasyaSmv (18 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/masyasmv-otus-macro-commands/health.svg)

```
[![Health](https://phpackages.com/badges/masyasmv-otus-macro-commands/health.svg)](https://phpackages.com/packages/masyasmv-otus-macro-commands)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
