Dátový model a surové dáta
Každý objekt zdroja je nezávislý od platformy: nesie ProviderName, z ktorého pochádza, normalizovaný enum ResourceState namiesto surového reťazca open/opened/OPEN a metódu raw(), ktorá vráti presný dekódovaný payload platformy pre akékoľvek pole, ktoré objekt nemodeluje. raw sa nikdy neserializuje do toArray() ani toJson():
use RoundlyConsulting\Git\Enums\ResourceState;
$pr = Git::github()->repo('acme/api')->pullRequest(1)->get();
$pr->state; // ResourceState::Open — identical across GitHub/GitLab/Bitbucket
$pr->state === ResourceState::Merged;
$pr->draft; // bool
$pr->provider; // ProviderName::Github
$pr->raw()['mergeable']; // any unmodelled provider field, still reachable
$pr->toArray(); // canonical shape — raw is never serialized
$pr->toJson();Mapovanie stavov
Pull requesty a issues normalizujú stav na každej platforme rovnako; nerozpoznané hodnoty sa namiesto výnimky zmenia na Unknown a pôvodný reťazec zostáva dostupný cez raw():
| ResourceState | GitHub | GitLab | Bitbucket |
|---|---|---|---|
Open | open | opened | OPEN |
Closed | closed | closed, locked | DECLINED, SUPERSEDED |
Merged | merged | merged | MERGED |
Unknown | čokoľvek iné | čokoľvek iné | čokoľvek iné |
Stav konceptu (draft) je samostatná booleovská hodnota — PullRequest::$draft, ktorú balík na všetkých troch platformách číta z poľa draft, z REST API aj z webhookov — nie stav.
Head commit, viditeľnosť a odkazy
PullRequest::$headSha a $headRepository (owner/name repozitára s head vetvou — pri pull requeste z forku repozitár forku) a Repository::$private, $language a $webUrl môžu byť null a plnia sa z REST aj webhook payloadov. V konštruktore sú za raw, takže pozičné volania new PullRequest(…) a new Repository(…) fungujú ďalej, a každé z nich je v toArray() aj v JSON:
| Pole | GitHub | GitLab | Bitbucket |
|---|---|---|---|
PullRequest::$headSha | head.sha | sha (REST), last_commit.id (hook) | source.commit.hash — skrátený 12-znakový hash |
PullRequest::$headRepository | head.repo.full_name (null pri zmazanom forku) | null — nesie sa len id projektu | source.repository.full_name |
Repository::$private | private | visibility iné ako public — internal sa počíta za súkromný; visibility_level z hooku sa číta rovnako | is_private |
Repository::$language | language | null — v payloade projektu chýba | language (prázdne → null) |
Repository::$webUrl | html_url | web_url | links.html.href |
Enumy
Každý enum — Feature, ProviderName, ResourceState, MergeMethod, ReviewEvent, DiffSide, CommentTarget, ComparisonStatus, ActivityType, WorkflowStatus a WorkflowConclusion — zdieľa pomocné metódy z enums-for-laravel: values(), labels(), options(), validationRule() a vyhľadávanie prípadov:
use RoundlyConsulting\Git\Enums\ProviderName;
ProviderName::values(); // Collection: github, gitlab, bitbucket
ProviderName::options(); // {value, label, name} options for a select
ProviderName::validationRule(); // "in:github,gitlab,bitbucket"
ProviderName::Github->label(); // "GitHub"
$request->validate(['provider' => ['required', ProviderName::validationRule()]]);Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.