/**
  * @test
  */
 public function filtersOtherThanLimitAndOffsetAreStoredInDataFilter()
 {
     $limit = 12;
     $offset = 3;
     $name = 'aaaa';
     $filters = compact('limit', 'offset', 'name');
     $collection = new FiltersCollection($filters);
     $this->assertTrue($collection->hasFilter('data'));
     $this->assertEquals(array('name' => $name), $collection->getFilter('data'));
 }
 /**
  * @param MessageCollection $messages
  * @param FiltersCollection $filters
  *
  * @return bool
  */
 public function retrieve(MessageCollection $messages, FiltersCollection $filters = null)
 {
     $findQuery = $this->prepareQuery($filters->getFilter('data'));
     try {
         $retrieved = $this->storage->find($this->collectionName, $findQuery);
         if ($filters->hasFilter('limit')) {
             $retrieved->limit($filters->getFilter('limit'));
         }
         if ($filters->hasFilter('offset')) {
             $retrieved->skip($filters->getFilter('offset'));
         }
         $retrieved->sort(array($this->defaultSortBy => -1));
     } catch (\MongoException $e) {
         $this->lastErrorMsg = $e->getMessage();
         return false;
     }
     foreach ($retrieved as $message) {
         $uniqueId = new UniqueId($message['id']);
         $messageFactory = new MessageFactory($uniqueId);
         $messages[] = $messageFactory->fromArray($message);
     }
     return true;
 }