public function extract()
{
$entity = clone $this->provider->getEntity();
// extract from array object
// ignore further extraction strategy
if (method_exists($entity, 'populate') || method_exists($entity, 'exchangeArray')) {
$hydrator = $this->getArraySerizableHydrator();
return $this->underscorizeKeys($hydrator->extract($entity));
}
// extract data from class getters and properties
$propertyHydrator = $this->getObjectPropertyHydrator();
$classMethodHydrator = $this->getClassMethodsHydrator();
// get a full set of original names, camelize keys and underscrorize keys
$extractedDataSet = array_replace($propertyHydrator->extract($entity), $classMethodHydrator->extract($entity), $this->camelizeKeys($propertyHydrator->extract($entity)), $this->camelizeKeys($classMethodHydrator->extract($entity)), $this->underscorizeKeys($propertyHydrator->extract($entity)), $this->underscorizeKeys($classMethodHydrator->extract($entity)));
$fields = $this->provider->getDefinition()->getFields();
$extractedData = [];
foreach ($extractedDataSet as $key => $value) {
if (array_key_exists($key, $fields)) {
$extractedData[$key] = $value;
}
}
return $extractedData;
}