/**
  * Executes search.
  *
  * @param SearchRequest $request
  *
  * @return SearchResponse
  */
 public function search(SearchRequest $request)
 {
     $search = $this->container->buildSearch($request);
     /** @var FilterInterface[] $filters */
     foreach ($this->container->all() as $name => $filter) {
         // We simply exclude not related filters and current filter itself.
         $relatedFilters = $this->container->getFiltersByRelation(new AndRelation([$filter->getSearchRelation(), new ExcludeRelation([$name])]));
         $filter->preProcessSearch($search, $this->container->buildSearch($request, $relatedFilters), $request->get($name));
     }
     $result = $this->repository->execute($search);
     return new SearchResponse($this->getFiltersViewData($result, $request), $result, $this->composeUrlParameters($request));
 }
 /**
  * Tests getFiltersByRelation method.
  */
 public function testGetFiltersByRelation()
 {
     $filtersContainer = new FiltersContainer();
     $result = $filtersContainer->getFiltersByRelation($this->getMock('ONGR\\FilterManagerBundle\\Relations\\RelationInterface'));
     $this->assertInstanceOf('ONGR\\FilterManagerBundle\\Relations\\FilterIterator', $result);
 }