public function __construct(ObjectManager $storage, array $query, array $options)
 {
     // not sure i like this
     $this->storage = $storage;
     $this->query = $query;
     $this->options = $options + array('pager-include-offset' => null, 'pager-offset' => null, 'pager-limit' => self::DEFAULT_LIMIT, 'pager-dir' => self::DEFAULT_DIRECTION);
     $this->options['pager-limit'] = intval($this->options['pager-limit']);
     if (!($this->options['pager-limit'] > 0 && $this->options['pager-limit'] < self::MAX_LIMIT)) {
         $this->options['pager-limit'] = self::DEFAULT_LIMIT;
     }
     if (!in_array($this->options['pager-dir'], self::$VALID_DIRECTIONS)) {
         $this->options['pager-dir'] = self::DEFAULT_DIRECTION;
     }
     $indexOptions = array('limit' => $this->options['pager-limit']);
     if (isset($this->options['sort'], $this->options['order'])) {
         $indexOptions += array('sort' => array($this->options['sort']), 'order' => $this->options['order']);
     }
     $this->sort = $storage->getIndexFor(array_keys($query), $indexOptions)->getSort();
     $useId = false;
     foreach ($this->sort as $val) {
         if (substr($val, -3) === '_id') {
             $useId = true;
         }
         break;
     }
     $this->offsetKey = $useId ? 'offset-id' : 'offset';
 }