Skip to content

Commit

Permalink
Merge pull request #21 from oanhnn/patch-1
Browse files Browse the repository at this point in the history
Add support NullResource
  • Loading branch information
freekmurze committed Jul 3, 2017
2 parents 8f00c66 + a73593a commit 366311e
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/Fractal.php
Expand Up @@ -64,7 +64,7 @@ public static function create($data = null, $transformer = null, $serializer = n
$instance = new static(new Manager());

$instance->data = $data ?: null;
$instance->dataType = $data ? $instance->determineDataType($data) : null;
$instance->dataType = $instance->determineDataType($data);
$instance->transformer = $transformer ?: null;
$instance->serializer = $serializer ?: null;

Expand Down Expand Up @@ -138,6 +138,10 @@ public function data($dataType, $data, $transformer = null)
*/
protected function determineDataType($data)
{
if (is_null($data)) {
return 'NullResource';
}

if (is_array($data)) {
return 'collection';
}
Expand Down
37 changes: 37 additions & 0 deletions tests/FractalTest.php
Expand Up @@ -3,7 +3,9 @@
namespace Spatie\Fractalistic\Test;

use League\Fractal\Pagination\Cursor;
use League\Fractal\Serializer\JsonApiSerializer;
use Spatie\Fractalistic\ArraySerializer;
use Spatie\Fractalistic\Fractal;

class FractalTest extends TestCase
{
Expand Down Expand Up @@ -115,6 +117,41 @@ public function it_can_create_fractal_data()
$this->assertInstanceOf(\League\Fractal\Scope::class, $resource);
}

/** @test */
public function it_can_perform_a_null_item()
{
$array = Fractal::create(null, NullableTransformer::class)
->serializeWith(new JsonApiSerializer())
->withResourceName('books')
->toArray();

$expectedArray = ['data' => null];

$this->assertEquals($expectedArray, $array);
}

/** @test */
public function it_can_create_a_null_resource()
{
$resource = Fractal::create(null, NullableTransformer::class)
->serializeWith(new JsonApiSerializer())
->withResourceName('books')
->getResource();

$this->assertInstanceOf(\League\Fractal\Resource\ResourceInterface::class, $resource);
}

/** @test */
public function it_can_create_nul_fractal_data()
{
$resource = Fractal::create(null, NullableTransformer::class)
->serializeWith(new JsonApiSerializer())
->withResourceName('books')
->createData();

$this->assertInstanceOf(\League\Fractal\Scope::class, $resource);
}

/** @test */
public function it_provides_chainable_methods()
{
Expand Down
16 changes: 16 additions & 0 deletions tests/NullableTransformer.php
@@ -0,0 +1,16 @@
<?php

namespace Spatie\Fractalistic\Test;

class NullableTransformer extends TestTransformer
{
/**
* @param array $book
*
* @return array
*/
public function transform(array $book = null)
{
return is_null($book) ? [] : parent::transform($book);
}
}

0 comments on commit 366311e

Please sign in to comment.