forked from spatie/ray
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPayloadFactory.php
66 lines (52 loc) · 1.49 KB
/
PayloadFactory.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
namespace Spatie\Ray;
use Carbon\CarbonInterface;
use Spatie\Ray\Payloads\BoolPayload;
use Spatie\Ray\Payloads\CarbonPayload;
use Spatie\Ray\Payloads\LogPayload;
use Spatie\Ray\Payloads\NullPayload;
use Spatie\Ray\Payloads\Payload;
class PayloadFactory
{
/** @var array */
protected $values;
/** @var \Closure|null */
protected static $payloadFinder = null;
public static function createForValues(array $arguments): array
{
return (new static($arguments))->getPayloads();
}
public static function registerPayloadFinder(callable $callable)
{
self::$payloadFinder = $callable;
}
public function __construct(array $values)
{
$this->values = $values;
}
public function getPayloads(): array
{
return array_map(function ($value) {
return $this->getPayload($value);
}, $this->values);
}
protected function getPayload($value): Payload
{
if (self::$payloadFinder) {
if ($payload = (static::$payloadFinder)($value)) {
return $payload;
}
}
if (is_bool($value)) {
return new BoolPayload($value);
}
if (is_null($value)) {
return new NullPayload();
}
if ($value instanceof CarbonInterface) {
return new CarbonPayload($value);
}
$primitiveValue = ArgumentConverter::convertToPrimitive($value);
return new LogPayload($primitiveValue);
}
}