Skip to content

Commit

Permalink
MappedObject::isInitialized() removed as it can work only with public…
Browse files Browse the repository at this point in the history
… properties
  • Loading branch information
mabar committed Jan 1, 2023
1 parent 3537fdc commit 99d430b
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 24 deletions.
6 changes: 3 additions & 3 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1349,7 +1349,7 @@ $input->optional; // true
### No fields are required

We can make all fields optional. This is useful for partial updates, like PATCH requests in REST APIs. Only changed
fields are sent, and we have to check which ones are available with `$mappedObject->isInitialized('property');`.
fields are sent, and we have to check which ones are available with reflection.

Unlike with default mode, mapped object are not auto-initialized as described
under [mapped object rule](#mappedobject-rule). At least empty array (`[]`) should be sent to initialize them.
Expand All @@ -1367,9 +1367,9 @@ $options->setRequiredFields(RequiredFields::none());
$input = $processor->process($data, ModesExampleInput::class, $options);
// $input == ModesExampleInput(required: __UNSET__, optional: __UNSET__)

$input->isInitialized('required'); // false
(new ReflectionProperty($input, 'required'))->isInitialized($input); // false
$input->required; // Error, property is not set
$input->isInitialized('optional'); // false
(new ReflectionProperty($input, 'optional'))->isInitialized($input); // false
$input->optional; // Error, property is not set
```

Expand Down
5 changes: 0 additions & 5 deletions src/MappedObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,6 @@
abstract class MappedObject
{

public function isInitialized(string $property): bool
{
return (new ReflectionProperty($this, $property))->isInitialized($this);
}

/**
* Checks if the public non-static property exists.
*/
Expand Down
11 changes: 9 additions & 2 deletions tests/Unit/Processing/DefaultObjectCreatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

use ArgumentCountError;
use Orisai\Exceptions\Logic\InvalidState;
use Orisai\ObjectMapper\MappedObject;
use Orisai\ObjectMapper\Processing\DefaultObjectCreator;
use PHPUnit\Framework\TestCase;
use ReflectionProperty;
use Tests\Orisai\ObjectMapper\Doubles\ConstructorUsingVO;
use Tests\Orisai\ObjectMapper\Doubles\DependentVO;
use Tests\Orisai\ObjectMapper\Doubles\EmptyVO;
Expand Down Expand Up @@ -54,7 +56,7 @@ public function testRuntimeFailure(): void
public function testDontUseConstructor(): void
{
$vo = new ConstructorUsingVO('string');
self::assertTrue($vo->isInitialized('string'));
self::assertTrue($this->isInitialized($vo, 'string'));
self::assertSame('string', $vo->string);

$creator = new DefaultObjectCreator();
Expand All @@ -63,7 +65,12 @@ public function testDontUseConstructor(): void
$creator->checkClassIsInstantiable(EmptyVO::class, true);

$vo = $creator->createInstance(ConstructorUsingVO::class, false);
self::assertFalse($vo->isInitialized('string'));
self::assertFalse($this->isInitialized($vo, 'string'));
}

private function isInitialized(MappedObject $object, string $property): bool
{
return (new ReflectionProperty($object, $property))->isInitialized($object);
}

}
34 changes: 20 additions & 14 deletions tests/Unit/Processing/DefaultProcessorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Orisai\ObjectMapper\Printers\TypeToStringConverter;
use Orisai\ObjectMapper\Processing\Options;
use Orisai\ObjectMapper\Processing\RequiredFields;
use ReflectionProperty;
use stdClass;
use Tests\Orisai\ObjectMapper\Doubles\AfterClassCallbackCurrentTypeInvalidDataVO;
use Tests\Orisai\ObjectMapper\Doubles\AfterClassCallbackNewTypeInvalidDataVO;
Expand Down Expand Up @@ -759,9 +760,9 @@ public function testRequiredNonDefaultFields(): void
'required' => null,
], PropertiesInitVO::class, $options);

self::assertTrue($vo->isInitialized('required'));
self::assertTrue($vo->isInitialized('optional'));
self::assertTrue($vo->isInitialized('structure'));
self::assertTrue($this->isInitialized($vo, 'required'));
self::assertTrue($this->isInitialized($vo, 'optional'));
self::assertTrue($this->isInitialized($vo, 'structure'));

self::assertNull($vo->required);
self::assertNull($vo->optional);
Expand All @@ -779,9 +780,9 @@ public function testRequireAllFields(): void
'structure' => [],
], PropertiesInitVO::class, $options);

self::assertTrue($vo->isInitialized('required'));
self::assertTrue($vo->isInitialized('optional'));
self::assertTrue($vo->isInitialized('structure'));
self::assertTrue($this->isInitialized($vo, 'required'));
self::assertTrue($this->isInitialized($vo, 'optional'));
self::assertTrue($this->isInitialized($vo, 'structure'));

self::assertNull($vo->required);
self::assertNull($vo->optional);
Expand Down Expand Up @@ -824,19 +825,19 @@ public function testRequireNoneFields(): void

$vo = $this->processor->process([], PropertiesInitVO::class, $options);

self::assertFalse($vo->isInitialized('required'));
self::assertFalse($vo->isInitialized('optional'));
self::assertFalse($vo->isInitialized('structure'));
self::assertFalse($this->isInitialized($vo, 'required'));
self::assertFalse($this->isInitialized($vo, 'optional'));
self::assertFalse($this->isInitialized($vo, 'structure'));

$vo = $this->processor->process([
'required' => null,
'optional' => null,
'structure' => [],
], PropertiesInitVO::class, $options);

self::assertTrue($vo->isInitialized('required'));
self::assertTrue($vo->isInitialized('optional'));
self::assertTrue($vo->isInitialized('structure'));
self::assertTrue($this->isInitialized($vo, 'required'));
self::assertTrue($this->isInitialized($vo, 'optional'));
self::assertTrue($this->isInitialized($vo, 'structure'));

self::assertNull($vo->required);
self::assertNull($vo->optional);
Expand Down Expand Up @@ -869,8 +870,8 @@ public function testSkipped(): void

self::assertSame('required', $vo->required);
self::assertSame('optional', $vo->optional);
self::assertFalse($vo->isInitialized('requiredSkipped'));
self::assertFalse($vo->isInitialized('optionalSkipped'));
self::assertFalse($this->isInitialized($vo, 'requiredSkipped'));
self::assertFalse($this->isInitialized($vo, 'optionalSkipped'));

$this->processor->processSkippedProperties([
'requiredSkipped',
Expand Down Expand Up @@ -999,4 +1000,9 @@ public function testAttributes(): void
self::assertSame('foo', $vo->string);
}

private function isInitialized(MappedObject $object, string $property): bool
{
return (new ReflectionProperty($object, $property))->isInitialized($object);
}

}

0 comments on commit 99d430b

Please sign in to comment.