Download the PHP package plin-code/job-boards-workable without Composer
On this page you can find all versions of the php package plin-code/job-boards-workable. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download plin-code/job-boards-workable
More information about plin-code/job-boards-workable
Files in plin-code/job-boards-workable
Package job-boards-workable
Short Description Workable job board connector for the plin-code job-boards family
License MIT
Homepage https://github.com/plin-code/job-boards-workable
Informations about the package job-boards-workable
Job Boards Workable
Workable connector for the plin-code job boards family. It reads the public Workable job board widget, which needs no credentials and returns a whole board in one request:
It implements PlinCode\JobBoards\Contracts\JobBoardClient from plin-code/job-boards-core, so it is interchangeable with every other connector in the family. Generated from plin-code/job-boards-skeleton.
Installation
Framework agnostic on purpose
WorkableClient takes core's HttpClient and an optional PSR-3 logger. It imports nothing from Laravel, so a Symfony or plain PHP consumer builds it directly:
WorkableServiceProvider is the only Laravel aware file in the package, and all it does is that same wiring out of the container.
Laravel usage
The provider is auto discovered.
Publish the config to change the base URL, the timeouts or the request headers:
The provider binds a PSR-18 client and a PSR-17 factory with bindIf, so an application that already binds its own keeps it. It deliberately does not bind JobBoardClient itself: several connectors implement that interface and would fight over the binding. Bind the one you want in your own application service provider.
Mapping
JobPostingDTO |
Workable field |
|---|---|
externalId |
shortcode, falling back to id, then '' |
title |
title, falling back to 'Untitled Position' |
location |
city and country joined with ', ', empty parts dropped, null when both are missing |
url |
url, falling back to shortlink, then '' |
department |
department, or null |
rawPayload |
the untouched job object |
Error handling
fetchJobsForCompany() never throws at the caller. Everything is logged through the injected PSR-3 logger and an empty list comes back, so one broken company cannot abort a sync over hundreds of them:
| Situation | Level | Message |
|---|---|---|
| non 2xx status | warning |
Workable API request failed |
payload has no jobs array |
warning |
Workable API response missing jobs array |
| DNS failure, refused connection, timeout | error |
Workable API connection error |
| unreadable body, unexpected shape | error |
Unexpected error fetching Workable jobs |
Every record carries company_slug. With no logger passed, a NullLogger is used and everything is silent.
validateSlug() and fetchCompanyDescription() return null for every failure and log nothing. That is intentional: neither a 404 nor a dropped connection proves a slug is good, and callers use these to validate user input.
Timeouts
PSR-18 has no notion of a timeout, so core's HttpClient::withTimeout() is only honoured by clients implementing PlinCode\JobBoards\Http\SupportsTimeout. Guzzle's PSR-18 client does not, so the configured 30 and 15 seconds are a request the transport may ignore. If timeouts matter to you, build the Guzzle client with ['timeout' => 30] and bind it yourself, or wrap it in a small SupportsTimeout adapter.
Depending on core
Core is on Packagist, so that constraint is all this package needs: there is no repositories block to carry. Do not commit a path repository pointing at a sibling checkout of core. It resolves against the layout of one machine, and the package then fails to install from a fresh clone anywhere else.
Development
tests/Unit builds the client against a faked PSR-18 client and boots no framework. tests/Feature boots Testbench and covers the service provider only.
License
The MIT License (MIT). Please see License File for more information.
All versions of job-boards-workable with dependencies
guzzlehttp/guzzle Version ^7.8
illuminate/contracts Version ^12.0||^13.0
plin-code/job-boards-core Version ^0.2||^0.3
psr/http-client Version ^1.0
psr/http-factory Version ^1.0
psr/log Version ^2.0||^3.0
spatie/laravel-package-tools Version ^1.16