
# API

Το `Rudel\Rudel` είναι στατικό facade. Κάθε μέθοδος σε αυτή τη σελίδα είναι δημόσια στατική μέθοδος αυτής της κλάσης.

```php
use Rudel\Rudel;

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

Οι μέθοδοι κύκλου ζωής που κλωνοποιούν ή διαγράφουν πίνακες (`create()`, `create_from_git()`, `destroy()`, `cleanup()`, `cleanup_merged()`) χρειάζονται ενεργό αίτημα WordPress με `$wpdb`. Προκαλούν ένα `RuntimeException` όταν καλούνται αφού το `Rudel::init()` βρίσκεται εκτός του WordPress. Δείτε την ενότητα [Αυτόνομη χρήση](https://rudel.inline0.dev/el/docs/features/standalone-use).

## Περιβάλλον εκτέλεσης

Αυτές οι μέθοδοι περιγράφουν το τρέχον αίτημα. Εκτός sandbox επιστρέφουν `false` ή `null`.

| Μέθοδος | Επιστρέφει |
|--------|---------|
| `is_sandbox(): bool` | `true` όταν το τρέχον αίτημα εκτελείται μέσα σε sandbox |
| `id(): ?string` | το ID του τρέχοντος sandbox |
| `path(): ?string` | τον τρέχοντα κατάλογο sandbox |
| `engine(): ?string` | `overlay` μέσα σε sandbox |
| `table_prefix(): ?string` | το πρόθεμα πινάκων του sandbox, για παράδειγμα `wp_b65338d_` |
| `url(): ?string` | το URL του sandbox· τα overlay sandbox μοιράζονται το URL του host |
| `exit_url(): string` | το URL του host |
| `is_email_disabled(): bool` | `true` όταν η εξερχόμενη αλληλογραφία είναι αποκλεισμένη για το αίτημα |
| `log_path(): ?string` | `{sandbox directory}/debug.log` |
| `version(): ?string` | την εγκατεστημένη έκδοση Rudel |
| `cli_command(): string` | τη βασική εντολή WP-CLI, `rudel` εκτός αν έχει οριστεί το `RUDEL_CLI_COMMAND` |

### `Rudel::context(): 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`

Επιστρέφει την ίδια σύνοψη περιβάλλοντος εκτέλεσης με το `wp rudel status` ως πίνακα: κατάσταση αρχικοποίησης, τρέχον sandbox, κατάλογος και πλήθος sandbox, οι τιμές `rudel_config` και αν έχει προγραμματιστεί αυτοματοποίηση.

## Εγγραφές sandbox

Τα sandbox επιστρέφονται ως αντικείμενα `Rudel\Environment`. Στις χρήσιμες ιδιότητες μόνο για ανάγνωση περιλαμβάνονται οι `id`, `name`, `path`, `created_at`, `status`, `template`, `owner`, `labels`, `purpose`, `expires_at`, `last_used_at`, `theme_slug`, `table_prefix` και `clone_source`. Στις μεθόδους περιλαμβάνονται οι `is_protected()`, `get_url()`, `get_table_prefix()`, `get_size()` και `to_array()`.

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

Επιστρέφει κάθε sandbox ως πίνακα αντικειμένων `Environment`. Δεν δέχεται φίλτρα.

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

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

Φορτώνει ένα sandbox βάσει ID ή επιστρέφει `null`.

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

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

Επιστρέφει τον κατάλογο που περιέχει τους καταλόγους sandbox.

## Κύκλος ζωής

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

Δημιουργεί ένα sandbox και το επιστρέφει. Το ID δημιουργείται από το όνομα και τέσσερις δεκαεξαδικούς χαρακτήρες.

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

Επιλογές:

| Κλειδί | Σημασία |
|-----|---------|
| `theme` | αναγνωριστικό θέματος προς αντιγραφή στο sandbox· από προεπιλογή, το ενεργό θέμα του host |
| `clone_from` | ID υπάρχοντος sandbox προς κλωνοποίηση αντί του host |
| `owner`, `purpose` | μεταδεδομένα ελεύθερου κειμένου |
| `labels` | πίνακας ή συμβολοσειρά τιμών χωρισμένων με κόμμα |
| `protected` | `true` για εξαίρεση του sandbox από την εκκαθάριση |
| `ttl_days` | λήξη με βάση τον χρόνο δημιουργίας |
| `expires_at` | ρητή χρονική σήμανση λήξης |
| `template` | ετικέτα που αποθηκεύεται στην εγγραφή· δεν φορτώνει αποθηκευμένο πρότυπο |
| `site_options` | ονόματα επιλογών και βαθμωτές τιμές που εγγράφονται στον πίνακα επιλογών του sandbox |
| `skip_limits` | `true` για παράκαμψη των `max_sandboxes` και `max_disk_mb` |

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

Δημιουργεί ένα sandbox και, στη συνέχεια, κλωνοποιεί μέσα του το `$remote_url`. Δέχεται τις επιλογές `create()`, καθώς και το `name` (από προεπιλογή το όνομα του αποθετηρίου) και το `type` (`theme` ή `plugin`). Επιστρέφει `[ 'environment' => Environment, 'git' => [...] ]`. Αν η κλωνοποίηση αποτύχει, το sandbox δεν επανέρχεται στην προηγούμενη κατάσταση· το σφάλμα επιστρέφεται στο `git.error`. Δείτε [Git](https://rudel.inline0.dev/el/docs/features/git).

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

Ενημερώνει τα μεταδεδομένα κύκλου ζωής και επιστρέφει το ανανεωμένο sandbox. Στα αποδεκτά κλειδιά περιλαμβάνονται τα `owner`, `labels`, `purpose`, `protected`, `ttl_days` (σε σχέση με τώρα), `expires_at`, `clear_expiry`, `name` και `site_options`.

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

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

Διαγράφει τους πίνακες του sandbox, αφαιρεί τον κατάλογό του και τα συνδεδεμένα worktree και διαγράφει την εγγραφή του. Επιστρέφει `false` αν το ID δεν υπάρχει. Δεν ελέγχει την προστασία: διαγράφονται και τα προστατευμένα sandbox.

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

Εφαρμόζει την πολιτική λήξης, ηλικίας και αδράνειας. Επιλογές: `dry_run` (bool), `max_age_days` και `max_idle_days` (παρακάμπτουν το `rudel_config` όταν δεν είναι μηδέν). Επιστρέφει τα `removed`, `skipped`, `errors` και `reasons` (ID προς `expired`, `age`, `idle` ή `protected`). Δείτε [Εκκαθάριση](https://rudel.inline0.dev/el/docs/features/cleanup).

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

Αφαιρεί sandbox των οποίων οι κλάδοι worktree του συνδεδεμένου Git έχουν συγχωνευτεί στον προεπιλεγμένο κλάδο του αποθετηρίου. Επιλογή: `dry_run`.

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

Καταγράφει δραστηριότητα (`last_used_at`) για το τρέχον sandbox. Το Rudel την καλεί σε κάθε αίτημα sandbox.

## Αρχεία καταγραφής

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

Επιστρέφει τις τελευταίες γραμμές του `debug.log` του sandbox ως `path`, `exists`, `empty`, `total_lines` και `lines`.

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

Αδειάζει το `debug.log` του sandbox και επιστρέφει τα `path`, `existed` και `cleared`.

## Στιγμιότυπα

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

Δημιουργεί ένα στιγμιότυπο και επιστρέφει τα μεταδεδομένα του (`name`, `created_at`, `sandbox_id`).

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

Επαναφέρει ένα στιγμιότυπο. Με την προεπιλεγμένη ρύθμιση `auto_snapshot_before_restore`, το Rudel αποθηκεύει πρώτα ένα στιγμιότυπο `pre-restore-...`.

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

Παραθέτει τα μεταδεδομένα των στιγμιότυπων, με τα νεότερα πρώτα. Δείτε [Στιγμιότυπα](https://rudel.inline0.dev/el/docs/features/snapshots).

## Πρότυπα

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

Τα αποθηκευμένα πρότυπα είναι μόνο αντίγραφα αρχείων. Κανένα API ή εντολή δεν δημιουργεί sandbox από πρότυπο. Δείτε [Πρότυπα](https://rudel.inline0.dev/el/docs/features/templates).

## Git

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

Υποβάλλει τις αλλαγές και κάνει push ένα checkout μέσα στον κατάλογο sandbox στον κλάδο `rudel/{id}`. Τα `$remote_url` και `$subdir` χρησιμοποιούν από προεπιλογή τις τιμές που είναι αποθηκευμένες στο sandbox. Επιστρέφει το SHA του commit ή `null` αν δεν υπάρχουν αλλαγές.

## Αυτοματοποίηση

- Το `Rudel::run_automation(): array` εκτελεί τώρα τις προγραμματισμένες εργασίες αυτοματοποίησης.
- Το `Rudel::run_scheduled_cleanup(): array` κάνει το ίδιο.

Δείτε [Αυτοματοποίηση](https://rudel.inline0.dev/el/docs/features/automation).

## Άγκιστρα και κατάλογος εντολών

- Το `Rudel::hooks(): array` επιστρέφει τον τεκμηριωμένο κατάλογο hook, οργανωμένο ανά όνομα hook. Δείτε [Άγκιστρα](https://rudel.inline0.dev/el/docs/features/hooks).
- Το `Rudel::cli_command_map(): array` επιστρέφει σειριοποιήσιμη περιγραφή κάθε εντολής `wp rudel` και της μεθόδου PHP που βρίσκεται από πίσω.
- Το `Rudel::resolve_cli_command( $path, array $args = [], array $assoc_args = [] ): array` μετατρέπει μία αναλυμένη εντολή σε σχέδιο εκτέλεσης χωρίς να την εκτελέσει.

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

Τα περισσότερα σχέδια χρησιμοποιούν τη μεταφορά `php`. Το `logs --follow` επιλύεται σε σχέδιο `shell` που εκτελείται `tail -f`.

## Αυτόνομη αρχικοποίηση

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

Συνδέει το facade με απευθείας σύνδεση MySQL για χρήση εκτός του WordPress. Το `$context` δέχεται `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` δημιουργεί τους πίνακες Rudel για την ενεργή σύνδεση.
- Το `Rudel::reset(): void` εκκαθαρίζει την αυτόνομη σύνδεση και την αποθηκευμένη κατάσταση.
