Update resource definition API to allow extending schema

This commit is contained in:
Toby Zerner 2019-10-15 18:56:51 +10:30
parent ae46a35cbd
commit 57ffa867c8
2 changed files with 23 additions and 10 deletions

View File

@ -31,9 +31,13 @@ final class JsonApi implements RequestHandlerInterface
$this->baseUrl = $baseUrl;
}
public function resource(string $type, $adapter, Closure $buildSchema = null): void
public function resource(string $type): ResourceType
{
$this->resources[$type] = new ResourceType($type, $adapter, $buildSchema);
if (! isset($this->resources[$type])) {
$this->resources[$type] = new ResourceType($type);
}
return $this->resources[$type];
}
public function getResources(): array

View File

@ -2,7 +2,6 @@
namespace Tobyz\JsonApiServer;
use Closure;
use Tobyz\JsonApiServer\Adapter\AdapterInterface;
use Tobyz\JsonApiServer\Schema\Type;
@ -10,14 +9,12 @@ final class ResourceType
{
private $type;
private $adapter;
private $buildSchema;
private $schemaCallbacks = [];
private $schema;
public function __construct(string $type, AdapterInterface $adapter, Closure $buildSchema = null)
public function __construct(string $type)
{
$this->type = $type;
$this->adapter = $adapter;
$this->buildSchema = $buildSchema;
}
public function getType(): string
@ -25,19 +22,31 @@ final class ResourceType
return $this->type;
}
public function adapter(AdapterInterface $adapter)
{
$this->adapter = $adapter;
return $this;
}
public function getAdapter(): AdapterInterface
{
return $this->adapter;
}
public function schema(callable $callback)
{
$this->schemaCallbacks[] = $callback;
return $this;
}
public function getSchema(): Type
{
if (! $this->schema) {
$this->schema = new Type;
if ($this->buildSchema) {
($this->buildSchema)($this->schema);
}
run_callbacks($this->schemaCallbacks, [$this->schema]);
}
return $this->schema;