public function cast($entity, array $data, array $options = array()) {
$defaults = array('schema' => null, 'first' => false);
$options += $defaults;
$model = null;
$exists = false;
if (!$data) {
return $data;
}
if (is_string($entity)) {
$model = $entity;
$entity = null;
$options['schema'] = $options['schema'] ?: $model::schema();
} elseif ($entity) {
$options['schema'] = $options['schema'] ?: $entity->schema();
$model = $entity->model();
if ($entity instanceof $this->_classes['entity']) {
$exists = $entity->exists();
}
}
$schema = $options['schema'] ?: array('_id' => array('type' => 'id'));
unset($options['schema']);
$exporter = $this->_classes['exporter'];
$options += compact('model', 'exists') + array('handlers' => $this->_handlers);
return parent::cast($entity, $exporter::cast($data, $schema, $this, $options), $options);
}