Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed Oct 3, 2023
1 parent 607b3f7 commit c10c712
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 31 deletions.
6 changes: 3 additions & 3 deletions src/Schema/Elements/AnyOf.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,9 @@ public function complete($value, Context $context)
{
return (new Nette\Schema\Validators($context))->steps(
$value,
fn($value) => $this->findAlternative($value, $context),
fn($value) => $this->doTransform($value, $context),
fn($value) => $this->doAsserts($value, $context) ?? $value,
fn(&$value) => $this->findAlternative($value, $context),
fn(&$value) => $this->doTransform($value, $context),
fn($value) => $this->doAsserts($value, $context),
);
}

Expand Down
8 changes: 3 additions & 5 deletions src/Schema/Elements/Base.php
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ private function doDeprecation(Context $context): void
}


private function doTransform($value, Context $context)
private function doTransform(&$value, Context $context): void
{
if ($this->castTo) {
if (Nette\Utils\Reflection::isBuiltinType($this->castTo)) {
Expand All @@ -125,11 +125,9 @@ private function doTransform($value, Context $context)
foreach ($value as $k => $v) {
$object->$k = $v;
}
return $object;
$value = $object;
}
}

return $value;
}


Expand Down Expand Up @@ -171,7 +169,7 @@ private function doFinalize($value, Context $context)
{
return (new Nette\Schema\Validators($context))->steps(
$value,
fn($value) => $this->doTransform($value, $context),
fn(&$value) => $this->doTransform($value, $context),
fn($value) => $this->doAsserts($value, $context),
);
}
Expand Down
14 changes: 6 additions & 8 deletions src/Schema/Elements/Structure.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,16 +156,16 @@ public function complete($value, Context $context)
$validator = new Nette\Schema\Validators($context);
return $validator->steps(
$value,
fn($value) => $validator->validateType($value, 'array') ?? $value,
fn($value) => $validator->validateRange($value, $this->range) ?? $value,
fn($value) => $this->validateItems($value, $context),
fn($value) => $this->doTransform($value, $context),
fn($value) => $this->doAsserts($value, $context) ?? $value,
fn() => $validator->validateType($value, 'array'),
fn() => $validator->validateRange($value, $this->range),
fn(&$value) => $this->validateItems($value, $context),
fn(&$value) => $this->doTransform($value, $context),
fn($value) => $this->doAsserts($value, $context),
);
}


private function validateItems(array $value, Context $context)
private function validateItems(array &$value, Context $context): void
{
$items = $this->items;
if ($extraKeys = array_keys(array_diff_key($value, $items))) {
Expand Down Expand Up @@ -197,8 +197,6 @@ private function validateItems(array $value, Context $context)

array_pop($context->path);
}

return $value;
}


Expand Down
26 changes: 13 additions & 13 deletions src/Schema/Elements/Type.php
Original file line number Diff line number Diff line change
Expand Up @@ -183,18 +183,14 @@ public function complete($value, Context $context)
$this->doDeprecation($context);

$validator = new Nette\Schema\Validators($context);
$validator->steps(
$value = $validator->steps(
$value,
fn($value) => $validator->validateType($value, $this->type) ?? $value,
fn($value) => $validator->validateRange($value, $this->range, $this->type) ?? $value,
fn($value) => $value === null || $this->pattern === null || $validator->validatePattern($value, $this->pattern) ?? $value,
// fn() => !$this->itemsValue || $this->validateItems($value, $context),
fn($value) => $this->itemsValue ? $this->validateItems($value, $context) : $value,
fn($value) => $this->validateItems($value, $context),
fn($value) => $merge ? Helpers::merge($value, $this->default) : $value,
[$this, 'doTransform'],
[$this, 'doAsserts'],
fn($value) => $this->doTransform($value, $context),
fn() => $validator->validateType($value, $this->type),
fn() => $validator->validateRange($value, $this->range, $this->type),
fn() => $value === null || $this->pattern === null || $validator->validatePattern($value, $this->pattern),
fn(&$value) => $this->validateItems($value, $context),
fn(&$value) => $value = $merge ? Helpers::merge($value, $this->default) : $value,
fn(&$value) => $this->doTransform($value, $context),
fn($value) => $this->doAsserts($value, $context),
);

Expand All @@ -207,8 +203,12 @@ public function complete($value, Context $context)
}


private function validateItems($value, Context $context)
private function validateItems(&$value, Context $context): void
{
if (!$this->itemsValue) {
return;
}

$res = [];
foreach ($value as $key => $val) {
$context->path[] = $key;
Expand All @@ -219,6 +219,6 @@ private function validateItems($value, Context $context)
array_pop($context->path);
}

return $res;
$value = $res;
}
}
4 changes: 2 additions & 2 deletions src/Schema/Validators.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ private static function isInRange($value, array $range): bool
}


public function validatePattern($value, string $pattern): void
public function validatePattern(string $value, string $pattern): void
{
if (!preg_match("\x01^(?:$pattern)$\x01Du", $value)) {
$this->context->addError(
Expand All @@ -88,7 +88,7 @@ public function steps($value, callable ...$steps)
{
$count = count($this->context->errors);
foreach ($steps as $step) {
$value = $step($value);
$step($value);
if ($count !== count($this->context->errors)) {
return null;
}
Expand Down

0 comments on commit c10c712

Please sign in to comment.