public function format(Builder $builder, IndexOptions $opts)
{
// Determines the formatter to be used.
$format = $opts->getOpt('format');
if ($format === 'exact') {
$formatter = function ($statement, $opts) {
return $statement;
};
} else {
if ($format === 'ids') {
$formatter = function ($statement, $opts) {
return $this->formatter->identityStatement($statement);
};
} else {
if ($format === 'canonical') {
$formatter = function ($statement, $opts) {
return $this->formatter->canonicalStatement($statement, $opts->getOpt('langs'));
};
} else {
throw new Exceptions\Exception("`{$format}` is not a valid format.");
}
}
}
// Returns the models.
return json_decode($builder->orderBy('stored', $opts->getOpt('ascending') === true ? 'ASC' : 'DESC')->skip($opts->getOpt('offset'))->take($opts->getOpt('limit'))->get()->map(function (Model $model) use($opts, $formatter) {
return $formatter($this->formatModel($model), $opts);
}));
}