Download the PHP package plin-code/job-boards-greenhouse without Composer

On this page you can find all versions of the php package plin-code/job-boards-greenhouse. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package job-boards-greenhouse

Job Boards Greenhouse

Job Boards Greenhouse

Packagist PHP from Packagist Laravel versions Total Downloads

Greenhouse connector for the plin-code job boards family. It reads the public Greenhouse job board API, which needs no credentials and returns a whole board in one request:

Greenhouse hosts boards in two regions and the slug does not say which, so both listing calls ask boards-api.greenhouse.io first and fall back to boards-api.eu.greenhouse.io.

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

GreenhouseClient 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:

GreenhouseServiceProvider 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 URLs, 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 Greenhouse field
externalId id cast to a string, '' when absent or not scalar
title title, falling back to 'Untitled Position' when absent, empty or not a string
location location.name, or null when absent, empty or not a string
url absolute_url, or '' when absent or not a string
department always null: Greenhouse keeps departments on a separate endpoint
rawPayload the untouched job object

Regions

Both fetchJobsForCompany() and validateSlug() try the US host and, on any non 2xx answer, the EU host. Whatever the EU host says is then the result. fetchCompanyDescription() asks the US host only.

Slug validation

Greenhouse publishes no account name endpoint, so the board listing doubles as one: validateSlug() returns jobs[0].company_name when it is there, and the slug itself otherwise. A board that resolves but lists nothing still validates and answers with the slug.

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 from both regions warning Greenhouse API request failed
payload has no jobs array warning Greenhouse API response missing jobs array
DNS failure, refused connection, timeout error Greenhouse API connection error
unreadable body, unexpected shape error Unexpected error fetching Greenhouse 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 core's PlinCode\JobBoards\Testing\FakePsrClient 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-greenhouse with dependencies

PHP Build Version
Package Version
Requires php Version ^8.3
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
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package plin-code/job-boards-greenhouse contains the following files

Loading the files please wait ...