/** * {@inheritdoc} */ public function buildFrom(ServerRequestInterface $request, HttpResource $definition) : SpecificationInterface { $specification = null; foreach ($request->query() as $parameter) { if ($parameter->name() === 'range') { /* range is used in QueryExtractor to determine the range of the resources to return and thus can't be used as a filter */ continue; } if (!$definition->properties()->contains($parameter->name())) { throw new FilterNotApplicableException($parameter->name()); } if ($specification === null) { $specification = new Filter($parameter->name(), $parameter->value()); } else { $specification = $specification->and(new Filter($parameter->name(), $parameter->value())); } } if ($specification === null) { throw new NoFilterFoundException(); } return $specification; }
private function resolveName(PropertyDefinition $property, HttpResource $resource) : string { return $property->variants()->reduce($property->name(), function (string $usedName, string $variant) use($resource) : string { if ($resource->properties()->contains($variant)) { return $variant; } return $usedName; }); }