
# API

`Rudel\Rudel` är en statisk fasad. Varje metod på den här sidan är en offentlig statisk metod i klassen.

```php
use Rudel\Rudel;

if ( Rudel::is_sandbox() ) {
    error_log( 'Running in sandbox ' . Rudel::id() );
}
```

Livscykelmetoder som klonar eller tar bort tabeller (`create()`, `create_from_git()`, `destroy()`, `cleanup()`, `cleanup_merged()`) kräver en aktiv WordPress-begäran med `$wpdb`. De utlöser ett `RuntimeException` om de anropas efter `Rudel::init()` utanför WordPress. Se [Fristående användning](https://rudel.inline0.dev/sv/docs/features/standalone-use).

## Körningskontext

De här metoderna beskriver den aktuella begäran. Utanför en sandlåda returnerar de `false` eller `null`.

| Metod | Returnerar |
|--------|---------|
| `is_sandbox(): bool` | `true` när den aktuella begäran körs i en sandlåda |
| `id(): ?string` | det aktuella sandlåde-ID:t |
| `path(): ?string` | den aktuella sandlådekatalogen |
| `engine(): ?string` | `overlay` i en sandlåda |
| `table_prefix(): ?string` | sandlådans tabellprefix, till exempel `wp_b65338d_` |
| `url(): ?string` | sandlådans URL; överlagringssandlådor delar värdens URL |
| `exit_url(): string` | värdens URL |
| `is_email_disabled(): bool` | `true` när utgående e-post blockeras för begäran |
| `log_path(): ?string` | `{sandbox directory}/debug.log` |
| `version(): ?string` | den installerade versionen av Rudel |
| `cli_command(): string` | rotkommandot WP-CLI, `rudel` om inte `RUDEL_CLI_COMMAND` har angetts |

### `Rudel::context(): array`

Returnerar allt ovan i en array:

```php
[
    'is_sandbox'     => true,
    'id'             => 'alpha-3be7',
    'path'           => '/var/www/html/wp-content/rudel-environments/alpha-3be7',
    'engine'         => 'overlay',
    'table_prefix'   => 'wp_b65338d_',
    'url'            => 'http://localhost/',
    'exit_url'       => 'http://localhost/',
    'email_disabled' => true,
    'log_path'       => '/var/www/html/wp-content/rudel-environments/alpha-3be7/debug.log',
    'version'        => '0.10.0',
    'cli_command'    => 'rudel',
]
```

### `Rudel::status(): array`

Returnerar samma körningssammanfattning som `wp rudel status` i en array: bootstrap-status, aktuell sandlåda, sandlådekatalog och antal, värdena för `rudel_config` samt om automatisering är schemalagd.

## Sandlådereposter

Sandlådor returneras som objekt av typen `Rudel\Environment`. Bland användbara skrivskyddade egenskaper finns `id`, `name`, `path`, `created_at`, `status`, `template`, `owner`, `labels`, `purpose`, `expires_at`, `last_used_at`, `theme_slug`, `table_prefix` och `clone_source`. Metoderna omfattar `is_protected()`, `get_url()`, `get_table_prefix()`, `get_size()` och `to_array()`.

### `Rudel::all(): array`

Returnerar alla sandlådor som en array med objekt av typen `Environment`. Inga filter kan anges.

```php
foreach ( Rudel::all() as $sandbox ) {
    echo $sandbox->id . ' ' . $sandbox->status . "\n";
}
```

### `Rudel::get( string $id ): ?Environment`

Laddar en sandlåda med angivet ID eller returnerar `null`.

```php
$sandbox = Rudel::get( 'alpha-3be7' );
```

### `Rudel::environments_dir(): string`

Returnerar katalogen som innehåller sandlådekatalogerna.

## Livscykel

### `Rudel::create( string $name, array $options = [] ): Environment`

Skapar en sandlåda och returnerar den. ID:t genereras från namnet plus fyra hexadecimala tecken.

```php
$sandbox = Rudel::create( 'alpha', [
    'theme'    => 'twentytwentyfour',
    'owner'    => 'dennis',
    'labels'   => [ 'qa', 'agent' ],
    'ttl_days' => 7,
] );
```

Alternativ:

| Nyckel | Betydelse |
|-----|---------|
| `theme` | temats slug att kopiera till sandlådan; standardvärdet är värdsystemets aktiva tema |
| `clone_from` | ID för en befintlig sandlåda att klona i stället för värdsystemet |
| `owner`, `purpose` | metadata i fritextformat |
| `labels` | array eller kommaseparerad sträng |
| `protected` | `true` för att undanta sandlådan från rensning |
| `ttl_days` | förfallotid räknad från skapandet |
| `expires_at` | uttrycklig tidsstämpel för förfallotid |
| `template` | en etikett som lagras i posten; den läser inte in en sparad mall |
| `site_options` | alternativnamn och skalärvärden som skrivs till sandlådans alternativtabell |
| `skip_limits` | `true` för att kringgå `max_sandboxes` och `max_disk_mb` |

### `Rudel::create_from_git( string $remote_url, array $options = [] ): array`

Skapar en sandlåda och klonar sedan `$remote_url` till den. Godtar alternativen `create()` samt `name` (standardvärdet är arkivets namn) och `type` (`theme` eller `plugin`). Returnerar `[ 'environment' => Environment, 'git' => [...] ]`. En misslyckad kloning återställer inte sandlådan; felet returneras i `git.error`. Se [Git](https://rudel.inline0.dev/sv/docs/features/git).

### `Rudel::update( string $id, array $changes ): Environment`

Uppdaterar livscykelmetadata och returnerar den uppdaterade sandlådan. Godtagna nycklar omfattar `owner`, `labels`, `purpose`, `protected`, `ttl_days` (relativt till nu), `expires_at`, `clear_expiry`, `name` och `site_options`.

```php
Rudel::update( 'alpha-3be7', [ 'protected' => true, 'ttl_days' => 3 ] );
```

### `Rudel::destroy( string $id ): bool`

Tar bort sandlådetabellerna, katalogen och länkade arbetsträd och raderar posten. Returnerar `false` om ID:t inte finns. Skyddet kontrolleras inte: även skyddade sandlådor förstörs.

### `Rudel::cleanup( array $options = [] ): array`

Kör reglerna för förfallotid, ålder och inaktivitet. Alternativ: `dry_run` (bool), `max_age_days` och `max_idle_days` (åsidosätter `rudel_config` när värdet inte är noll). Returnerar `removed`, `skipped`, `errors` och `reasons` (ID till `expired`, `age`, `idle` eller `protected`). Se [Rensning](https://rudel.inline0.dev/sv/docs/features/cleanup).

### `Rudel::cleanup_merged( array $options = [] ): array`

Tar bort sandlådor vars länkade Git-arbetsträdsgrenar har slagits samman till arkivets standardgren. Alternativ: `dry_run`.

### `Rudel::touch_current_environment(): void`

Registrerar aktivitet (`last_used_at`) för den aktuella sandlådan. Rudel anropar detta vid varje sandlådeförfrågan.

## Loggar

### `Rudel::read_log( string $id, int $lines = 50 ): array`

Returnerar de sista raderna i sandlådans `debug.log` som `path`, `exists`, `empty`, `total_lines` och `lines`.

### `Rudel::clear_log( string $id ): array`

Tömmer sandlådans `debug.log` och returnerar `path`, `existed` och `cleared`.

## Ögonblicksbilder

### `Rudel::snapshot( string $id, string $name ): array`

Skapar en ögonblicksbild och returnerar dess metadata (`name`, `created_at`, `sandbox_id`).

### `Rudel::restore( string $id, string $name ): void`

Återställer en ögonblicksbild. Med standardinställningen `auto_snapshot_before_restore` sparar Rudel först en `pre-restore-...`-ögonblicksbild.

### `Rudel::snapshots( string $id ): array`

Listar metadata för ögonblicksbilder, med den senaste först. Se [Ögonblicksbilder](https://rudel.inline0.dev/sv/docs/features/snapshots).

## Mallar

- `Rudel::save_template( string $id, string $name, string $description = '' ): array`
- `Rudel::templates(): array`
- `Rudel::delete_template( string $name ): bool`

Sparade mallar är endast filkopior. Inget API eller kommando skapar en sandlåda från en mall. Se [Mallar](https://rudel.inline0.dev/sv/docs/features/templates).

## Git

### `Rudel::push( string $id, string $remote_url = '', string $message = 'Update from Rudel', string $subdir = '' ): ?string`

Bekräftar ändringar i en checkout i sandlådans katalog och skickar dem till grenen `rudel/{id}`. `$remote_url` och `$subdir` använder som standard värdena som lagras i sandlådan. Returnerar commitens SHA, eller `null` om inget har ändrats.

## Automatisering

- `Rudel::run_automation(): array` kör de schemalagda automatiseringsuppgifterna nu.
- `Rudel::run_scheduled_cleanup(): array` gör samma sak.

Se [Automatisering](https://rudel.inline0.dev/sv/docs/features/automation).

## Hookar och kommandoöversikt

- `Rudel::hooks(): array` returnerar den dokumenterade hookkatalogen, grupperad efter hooknamn. Se [Hookar](https://rudel.inline0.dev/sv/docs/features/hooks).
- `Rudel::cli_command_map(): array` returnerar en serialiserbar beskrivning av varje `wp rudel`-kommando och metoden PHP bakom det.
- `Rudel::resolve_cli_command( $path, array $args = [], array $assoc_args = [] ): array` omvandlar ett parsad kommando till en körningsplan utan att köra det.

```php
$plan = Rudel::resolve_cli_command( 'wp rudel destroy', [ 'alpha-3be7' ] );
// $plan['callable']           => 'Rudel\Rudel::destroy'
// $plan['arguments']          => [ 'alpha-3be7' ]
// $plan['needs_confirmation'] => true
```

De flesta planer använder transporten `php`. `logs --follow` löses till en `shell`-plan som kör `tail -f`.

## Fristående initiering

### `Rudel::init( Connection $connection, array $context = [] ): void`

Riktar fasaden mot en direkt MySQL-anslutning för användning utanför WordPress. `$context` godtar `environments_dir`.

```php
use Rudel\Connection;
use Rudel\Rudel;

Rudel::init(
    new Connection( '127.0.0.1', 'wordpress', 'root', 'root', 'wp_' ),
    [ 'environments_dir' => '/var/www/html/wp-content/rudel-environments' ]
);
```

- `Rudel::ensure_schema(): void` skapar Rudel-tabellerna för den aktiva anslutningen.
- `Rudel::reset(): void` rensar den fristående anslutningen och det cachade tillståndet.
