Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Commits on Source (2)
## [4.13.1](https://git.customd.com/composer/Laravel-Helpers/compare/v4.13.0...v4.13.1) (2024-03-04)
### Bug Fixes
* adds toJsonResource to valueObjects ([7e8af8d](https://git.customd.com/composer/Laravel-Helpers/commit/7e8af8df7ceabac2ecd987e68ff1642c89fcc2de))
# [4.13.0](https://git.customd.com/composer/Laravel-Helpers/compare/v4.12.0...v4.13.0) (2024-02-28)
......
......@@ -24,6 +24,7 @@
},
"require-dev": {
"filament/filament": "^3.2",
"phpsa/laravel-api-controller": "*",
"nunomaduro/larastan": "^1.0|^2.0",
"orchestra/testbench": "^7.0|^8.0|^9.0",
"phpunit/phpunit": "^9.0|^10.0"
......
<?php
namespace CustomD\LaravelHelpers\ValueObjects;
use CustomD\LaravelHelpers\ValueObjects\Attributes\ChildValueObject;
use CustomD\LaravelHelpers\ValueObjects\Attributes\CollectableValue;
use CustomD\LaravelHelpers\ValueObjects\Attributes\MakeableObject;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Contracts\Support\Arrayable;
use ReflectionClass;
use ReflectionParameter;
use Illuminate\Support\Collection;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Arr;
use ReflectionParameter;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Contracts\Container\BindingResolutionException;
use CustomD\LaravelHelpers\ValueObjects\Attributes\MakeableObject;
use CustomD\LaravelHelpers\ValueObjects\Attributes\ChildValueObject;
use CustomD\LaravelHelpers\ValueObjects\Attributes\CollectableValue;
/**
* @implements Arrayable<string,mixed>
......@@ -92,12 +92,25 @@ abstract class ValueObject implements Arrayable
*/
public function toArray(): array
{
return static::getConstructorArgs()
->map(fn(ReflectionParameter $parameter) => $parameter->getName())
->mapWithKeys(fn($property) => [$property => $this->{$property}])
->toArray();
}
public function __toString()
{
return json_encode($this->toArray(), JSON_THROW_ON_ERROR);
}
public function toJsonResource(?string $resource = null): JsonResource
{
$resource ??= JsonResource::class;
return $resource::make($this->toArray());
}
/**
* @param array<string, mixed|ValueObject|Collection> ...$args
......
......@@ -5,6 +5,8 @@ use Orchestra\Testbench\TestCase;
use CustomD\LaravelHelpers\Tests\ValueObjects\SimpleValue;
use CustomD\LaravelHelpers\Tests\ValueObjects\ComplexValue;
use CustomD\LaravelHelpers\Tests\ValueObjects\SimpleValueFormRequest;
use Illuminate\Http\Request;
use Phpsa\LaravelApiController\Http\Resources\ApiResource;
class ValueObjectTest extends TestCase
{
......@@ -95,5 +97,41 @@ class ValueObjectTest extends TestCase
$this->assertTrue($value->simpleValues instanceof \Illuminate\Support\Collection);
$this->assertSame(3, $value->simpleValues->count());
$this->assertSame('test', $value->simpleValues->first()->value);
$this->assertTrue($value->simpleValues->first() instanceof \CustomD\LaravelHelpers\Tests\ValueObjects\SimpleValue);
}
public function testing_standard_resource_object()
{
$value = SimpleValue::make('test', 10);
$this->assertInstanceOf(SimpleValue::class, $value);
$this->assertSame(
json_encode(['data' => $value->toArray()]),
$value->toJsonResource()->toResponse(new Request())->content()
);
}
public function test_a_complex_value_construct_with_api_resource()
{
$data = [
'value' => 'test',
'simpleValue' => [
'count' => '11',
'value' => 'test',
],
'address' => [
'street' => '123 Fake St'
],
'constructable' => ['a' => 'b', 'c' => 'd', 'this' => 'is_array'],
'simpleValues' => [
['value' => 'test', 'count' => 11],
['value' => 'test2', 'count' => 13],
['value' => 'test3', 'count' => 15],
]
];
$value = ComplexValue::make(...$data);
$res = json_decode($value->toJsonResource(ApiResource::class)->toResponse(new Request())->content(), true);
$this->assertIsArray($res['data']);
}
}
......@@ -20,7 +20,7 @@ class ComplexValue extends ValueObject
#[MakeableObject(Constructable::class)]
readonly public ?Constructable $constructable = null,
#[CollectableValue(SimpleValue::class)]
readonly ?Collection $simpleValues = null,
readonly public ?Collection $simpleValues = null,
) {
}
......