Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
Signed-off-by: Nathanael Esayeas <nathanael.esayeas@protonmail.com>
  • Loading branch information
ghostwriter committed Oct 8, 2024
1 parent a0d69b3 commit 6c320a0
Showing 1 changed file with 104 additions and 13 deletions.
117 changes: 104 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# Wip
# Cli

[![Compliance](https://github.com/ghostwriter/wip/actions/workflows/compliance.yml/badge.svg)](https://github.com/ghostwriter/wip/actions/workflows/compliance.yml)
[![Supported PHP Version](https://badgen.net/packagist/php/ghostwriter/wip?color=8892bf)](https://www.php.net/supported-versions)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/ghostwriter?label=Sponsor+@ghostwriter/wip&logo=GitHub+Sponsors)](https://github.com/sponsors/ghostwriter)
[![Code Coverage](https://codecov.io/gh/ghostwriter/wip/branch/main/graph/badge.svg)](https://codecov.io/gh/ghostwriter/wip)
[![Type Coverage](https://shepherd.dev/github/ghostwriter/wip/coverage.svg)](https://shepherd.dev/github/ghostwriter/wip)
[![Psalm Level](https://shepherd.dev/github/ghostwriter/wip/level.svg)](https://psalm.dev/docs/running_psalm/error_levels)
[![Latest Version on Packagist](https://badgen.net/packagist/v/ghostwriter/wip)](https://packagist.org/packages/ghostwriter/wip)
[![Downloads](https://badgen.net/packagist/dt/ghostwriter/wip?color=blue)](https://packagist.org/packages/ghostwriter/wip)
[![Compliance](https://github.com/ghostwriter/cli/actions/workflows/compliance.yml/badge.svg)](https://github.com/ghostwriter/cli/actions/workflows/compliance.yml)
[![Supported PHP Version](https://badgen.net/packagist/php/ghostwriter/cli?color=8892bf)](https://www.php.net/supported-versions)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/ghostwriter?label=Sponsor+@ghostwriter/cli&logo=GitHub+Sponsors)](https://github.com/sponsors/ghostwriter)
[![Code Coverage](https://codecov.io/gh/ghostwriter/cli/branch/main/graph/badge.svg)](https://codecov.io/gh/ghostwriter/cli)
[![Type Coverage](https://shepherd.dev/github/ghostwriter/cli/coverage.svg)](https://shepherd.dev/github/ghostwriter/cli)
[![Psalm Level](https://shepherd.dev/github/ghostwriter/cli/level.svg)](https://psalm.dev/docs/running_psalm/error_levels)
[![Latest Version on Packagist](https://badgen.net/packagist/v/ghostwriter/cli)](https://packagist.org/packages/ghostwriter/cli)
[![Downloads](https://badgen.net/packagist/dt/ghostwriter/cli?color=blue)](https://packagist.org/packages/ghostwriter/cli)

work in progress
Provides a micro-framework for building CLI tools in PHP.

> [!WARNING]
>
Expand All @@ -20,7 +20,7 @@ work in progress
You can install the package via composer:

``` bash
composer require ghostwriter/wip
composer require ghostwriter/cli
```

### Star ⭐️ this repo if you find it useful
Expand All @@ -30,13 +30,104 @@ You can also star (🌟) this repo to find it easier later.
## Usage

```php
// work in progress
<?php declare(strict_types=1);

namespace Vendor\Project;

use GhostWriter\Cli\Attribute\Application;use GhostWriter\Cli\Attribute\Argument;use GhostWriter\Cli\Attribute\Command;use GhostWriter\Cli\Attribute\Option;use Ghostwriter\Cli\Core\MiddlewareInterface;

#[Command(name: 'new', description: 'Create a new project')]
final class NewCommand
{
#[Argument(help: 'Project name')]
public string $name;
#[Option(short: 't', long: 'type', help: 'Project type')]
public string $type = 'php';
#[Option(short: 'd', long: 'directory', help: 'Project directory')]
public string $directory;
}

#[Command(name: 'help', description: 'Show help')]
final class HelpCommand
{
#[Argument(help: 'Command to show help for')]
public ?string $command = null;
}

#[Command(name: 'list', description: 'List all projects')]
final class ListCommand
{
#[Option(short: 't', long: 'type', help: 'Project type')]
public string $type = 'php';
}

final readonly class GitHubAuthMiddleware implements MiddlewareInterface
{
public function __construct(private string $token) {}

#[Override]
public function process(CommandInterface $command, HandlerInterface $handler): ResultInterface
{
$command->env['GITHUB'] = $this->token;

return $handler->handle($command);
}
}

#[Application(
package: 'ghostwriter/architect',
commands: [NewCommand::class, HelpCommand::class, ListCommand::class],
middlewares: [GitHubAuthMiddleware::class]
)]
final class Architect
{
// Default options available in all subcommands (help, version)
#[Option(short: 'h', long: 'help', help: 'Show help')]
public bool $help = false;

#[Option(short: 'v', long: 'version', help: 'Show version')]
public bool $version = false;

// Custom optional options (with default values)
#[Option(short: 'b', long: 'bool', help: 'Set the boolean flag')]
public bool $bool = false;

#[Option(short: 'f', long: 'float', help: 'Set the float to <float>')]
public float $float = 0.0;

#[Option(short: 'i', long: 'int', help: 'Set the integer to <int>')]
public int $int = 0;

#[Option(short: 's', long: 'string', help: 'Set the string to <string>')]
public string $string = '#BlackLivesMatter';

#[Option(short: 'l', long: 'list', help: 'Set the list to <list>')]
public array $list = [];

#[Option(short: 'n', long: 'null', help: 'Set the null to <null>')]
public ?string $null = null;

// Custom required options
#[Option(short: 'r', long: 'required', help: 'Set the required to <required>', required: true)]
public string $required;

// Required arguments
#[Argument(help: 'Project name')]
public string $project;

// Optional arguments (with default values)
#[Argument(help: 'Project directory')]
public string $directory = '.';
}

$exitCode = \GhostWriter\Cli\Application::new(Architect::class)->run($_SERVER['argv']);
exit($exitCode);
```

### Credits

- [Nathanael Esayeas](https://github.com/ghostwriter)
- [All Contributors](https://github.com/ghostwriter/wip/contributors)
- [All Contributors](https://github.com/ghostwriter/cli/contributors)

### Changelog

Expand Down

0 comments on commit 6c320a0

Please sign in to comment.