Files
izyim/app/Classes/Modules/Orders/Processors/StepProcessMapper.php
T
Omair Saleh 43a9e0ca03 large commit
2019-05-18 12:14:31 +08:00

89 lines
2.2 KiB
PHP

<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Classes\Modules\Orders\DataTransferObjects\StepObject;
use Carbon\Carbon;
use Illuminate\Support\Str;
class StepProcessMapper
{
/**
* @param $class
* @param array $valuesArray
* @return array
* @throws \ReflectionException
*/
public function map(string $class, array $valuesArray){
$arguments = [];
$reflection = new \ReflectionMethod($class, 'execute');
$parameters = $reflection->getParameters();
foreach ($parameters as $parameter){
if(!$parameter->getClass()){
$arguments[] = self::mapVariables($parameter->getType(), $valuesArray[Str::snake($parameter->getName())]?? null);
continue;
}
$className = $parameter->getClass()->getName();
if(!in_array($className, [OrderObject::class, StepObject::class, Carbon::class])){
$arguments[] = self::mapClassObjects($className, $valuesArray);
}
}
return $arguments;
}
/**
* @param string $type
* @param $value
* @return bool|float|int|string
*/
private function mapVariables(string $type, $value){
if($value === null){
return null;
}
switch ($type){
case 'float':
return (float) $value;
break;
case 'int':
case 'integer':
return (int) $value;
break;
case 'bool':
case 'boolean':
return (bool) $value;
break;
default:
return (string) $value;
}
}
/**
* @param string $class
* @param array $valuesArray
* @return mixed
* @throws \ReflectionException
*/
private function mapClassObjects(string $class, array $valuesArray){
$reflection = new \ReflectionClass($class);
$properties = $reflection->getProperties();
return new $class(...array_map(function ($property) use ($valuesArray) {
return $valuesArray[Str::snake($property->getName())] ?? null;
}, $properties));
}
}