diff --git a/README.md b/README.md index 4e43a2e..d38123c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Implementation of [JSON API](http://jsonapi.org) in PHP 7 This library is an attempt to express business rules of JSON API specification in a set of PHP 7 classes. -A simple example to illustrate the general idea. This (slightly modified) JSON representation from +A simple example to illustrate the general idea. This JSON representation from [the documentation](http://jsonapi.org/format/#document-resource-objects) ```json @@ -19,8 +19,8 @@ A simple example to illustrate the general idea. This (slightly modified) JSON r "id": "9" }, "links": { - "self": "\/articles\/1\/relationships\/author", - "related": "\/articles\/1\/author" + "self": "/articles/1/relationships/author", + "related": "/articles/1/author" } } } @@ -29,6 +29,7 @@ A simple example to illustrate the general idea. This (slightly modified) JSON r ``` can be built with the following php code: ```php +setLink('related', '/articles/1/author'); $articles->setRelationship('author', $author); $articles->setAttribute('title', 'Rails is Omakase'); $doc = Document::fromResource($articles); -echo json_encode($doc, JSON_PRETTY_PRINT); +echo json_encode($doc, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); ``` Please refer to [the tests](./test) for the full API documentation: diff --git a/src/Document/ArrayMeta.php b/src/Document/ArrayMeta.php index 91473a4..b41444d 100644 --- a/src/Document/ArrayMeta.php +++ b/src/Document/ArrayMeta.php @@ -11,6 +11,9 @@ namespace JsonApiPhp\JsonApi\Document; +/** + * @deprecated to be removed in 1.0, use Meta::fromArray() + */ class ArrayMeta extends Meta { public function __construct(array $array) diff --git a/src/Document/Meta.php b/src/Document/Meta.php index f4d060a..dd45f88 100644 --- a/src/Document/Meta.php +++ b/src/Document/Meta.php @@ -20,6 +20,11 @@ public function __construct(\stdClass $data) $this->data = $data; } + public static function fromArray(array $array): self + { + return new self((object) $array); + } + public function jsonSerialize() { return $this->data; diff --git a/test/Document/DocumentTest.php b/test/Document/DocumentTest.php index d8b63e9..000456f 100644 --- a/test/Document/DocumentTest.php +++ b/test/Document/DocumentTest.php @@ -12,8 +12,8 @@ namespace JsonApiPhp\JsonApi\Test\Document; use JsonApiPhp\JsonApi\Document; -use JsonApiPhp\JsonApi\Document\ArrayMeta; use JsonApiPhp\JsonApi\Document\Error; +use JsonApiPhp\JsonApi\Document\Meta; use JsonApiPhp\JsonApi\Document\Resource\NullResource; use JsonApiPhp\JsonApi\Document\Resource\ResourceIdentifier; use JsonApiPhp\JsonApi\Test\BaseTestCase; @@ -24,7 +24,7 @@ public function testCanCreateFromMeta() { $this->assertEqualsAsJson( ['meta' => ['foo' => 'bar']], - Document::fromMeta(new ArrayMeta(['foo' => 'bar'])) + Document::fromMeta(Meta::fromArray(['foo' => 'bar'])) ); } diff --git a/test/Document/ErrorTest.php b/test/Document/ErrorTest.php index 0f76612..dc65371 100644 --- a/test/Document/ErrorTest.php +++ b/test/Document/ErrorTest.php @@ -31,7 +31,7 @@ public function testErrorWithFullSetOfProperties() $e->setDetail('Nothing is found'); $e->setSourcePointer('/data'); $e->setSourceParameter('test_param'); - $e->setMeta(new ArrayMeta(['foo' => 'bar'])); + $e->setMeta(Meta::fromArray(['foo' => 'bar'])); $this->assertEqualsAsJson( [ diff --git a/test/Document/MetaTest.php b/test/Document/MetaTest.php index 928dba0..46eb96a 100644 --- a/test/Document/MetaTest.php +++ b/test/Document/MetaTest.php @@ -11,13 +11,13 @@ namespace JsonApiPhp\JsonApi\Test\Document; -use JsonApiPhp\JsonApi\Document\ArrayMeta; +use JsonApiPhp\JsonApi\Document\Meta; use PHPUnit\Framework\TestCase; class MetaTest extends TestCase { public function testPhpArraysAreConvertedToObjects() { - $this->assertEquals('{"0":"foo"}', json_encode(new ArrayMeta(['foo']))); + $this->assertEquals('{"0":"foo"}', json_encode(Meta::fromArray(['foo']))); } } diff --git a/test/Document/Resource/Relationship/RelationshipTest.php b/test/Document/Resource/Relationship/RelationshipTest.php index c98948d..383bd6b 100644 --- a/test/Document/Resource/Relationship/RelationshipTest.php +++ b/test/Document/Resource/Relationship/RelationshipTest.php @@ -11,7 +11,6 @@ namespace JsonApiPhp\JsonApi\Test\Document\Resource\Relationship; -use JsonApiPhp\JsonApi\Document\ArrayMeta; use JsonApiPhp\JsonApi\Document\Meta; use JsonApiPhp\JsonApi\Document\Resource\Relationship\Linkage; use JsonApiPhp\JsonApi\Document\Resource\Relationship\Relationship; @@ -91,7 +90,7 @@ public function testCanCreateFromMeta() 'a' => 'b', ], ], - Relationship::fromMeta(new ArrayMeta(['a' => 'b'])) + Relationship::fromMeta(Meta::fromArray(['a' => 'b'])) ); } } diff --git a/test/Document/Resource/ResourceFieldsTest.php b/test/Document/Resource/ResourceFieldsTest.php index e14e0b2..ffe323e 100644 --- a/test/Document/Resource/ResourceFieldsTest.php +++ b/test/Document/Resource/ResourceFieldsTest.php @@ -11,7 +11,7 @@ namespace JsonApiPhp\JsonApi\Test\Document\Resource; -use JsonApiPhp\JsonApi\Document\ArrayMeta; +use JsonApiPhp\JsonApi\Document\Meta; use JsonApiPhp\JsonApi\Document\Resource\Relationship\Relationship; use JsonApiPhp\JsonApi\Document\Resource\ResourceObject; use PHPUnit\Framework\TestCase; @@ -37,7 +37,7 @@ public function testCanNotSetRelationshipIfAttributeExists() { $res = new ResourceObject('books', '1'); $res->setAttribute('foo', 'bar'); - $res->setRelationship('foo', Relationship::fromMeta(new ArrayMeta(['a' => 'b']))); + $res->setRelationship('foo', Relationship::fromMeta(Meta::fromArray(['a' => 'b']))); } /** @@ -47,7 +47,7 @@ public function testCanNotSetRelationshipIfAttributeExists() public function testCanNotSetAttributeIfRelationshipExists() { $res = new ResourceObject('books', '1'); - $res->setRelationship('foo', Relationship::fromMeta(new ArrayMeta(['a' => 'b']))); + $res->setRelationship('foo', Relationship::fromMeta(Meta::fromArray(['a' => 'b']))); $res->setAttribute('foo', 'bar'); } @@ -72,7 +72,7 @@ public function testAttributeCanNotHaveReservedNames(string $name) public function testRelationshipCanNotHaveReservedNames(string $name) { $res = new ResourceObject('books', 'abc'); - $res->setRelationship($name, Relationship::fromMeta(new ArrayMeta(['a' => 'b']))); + $res->setRelationship($name, Relationship::fromMeta(Meta::fromArray(['a' => 'b']))); } public function invalidAttributeNames(): array diff --git a/test/Document/Resource/ResourceTest.php b/test/Document/Resource/ResourceTest.php index 48957ca..0179836 100644 --- a/test/Document/Resource/ResourceTest.php +++ b/test/Document/Resource/ResourceTest.php @@ -11,7 +11,7 @@ namespace JsonApiPhp\JsonApi\Test\Document\Resource; -use JsonApiPhp\JsonApi\Document\ArrayMeta; +use JsonApiPhp\JsonApi\Document\Meta; use JsonApiPhp\JsonApi\Document\Resource\Relationship\Relationship; use JsonApiPhp\JsonApi\Document\Resource\ResourceIdentifier; use JsonApiPhp\JsonApi\Document\Resource\ResourceObject; @@ -58,7 +58,7 @@ public function resourceProvider() 'foo' => 'bar', ], ], - new ResourceIdentifier('books', '42abc', new ArrayMeta(['foo' => 'bar'])), + new ResourceIdentifier('books', '42abc', Meta::fromArray(['foo' => 'bar'])), ], [ [ @@ -83,10 +83,10 @@ public function resourceProvider() ], (function () { $resource = new ResourceObject('books', '42abc'); - $resource->setMeta(new ArrayMeta(['foo' => 'bar'])); + $resource->setMeta(Meta::fromArray(['foo' => 'bar'])); $resource->setAttribute('attr', 'val'); $resource->setLink('self', 'http://localhost'); - $resource->setRelationship('author', Relationship::fromMeta(new ArrayMeta(['a' => 'b']))); + $resource->setRelationship('author', Relationship::fromMeta(Meta::fromArray(['a' => 'b']))); return $resource; })(), ], diff --git a/test/IntegrationTest.php b/test/IntegrationTest.php index d81c007..211ed25 100644 --- a/test/IntegrationTest.php +++ b/test/IntegrationTest.php @@ -37,8 +37,8 @@ public function testFromTheReadmeFile() "id": "9" }, "links": { - "self": "\/articles\/1\/relationships\/author", - "related": "\/articles\/1\/author" + "self": "/articles/1/relationships/author", + "related": "/articles/1/author" } } } @@ -60,7 +60,7 @@ public function testFromTheReadmeFile() $this->assertEquals( $json, - json_encode($doc, JSON_PRETTY_PRINT) + json_encode($doc, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) ); } }