Example #1
0
 /**
  * {@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;
     });
 }