Completed
Push — master ( 922e8a...cfbc00 )
by Akihito
02:15
created

Formatter::unserialize()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 13
rs 9.4285
cc 2
eloc 8
nc 2
nop 1
1
<?php
2
namespace Ackintosh\Snidel\Task;
3
4
use Ackintosh\Snidel\Task\TaskInterface;
5
use Ackintosh\Snidel\Task\Task;
6
use Ackintosh\Snidel\Task\MinifiedTask;
7
use Opis\Closure\SerializableClosure;
8
9
class Formatter
10
{
11
    /**
12
     * @param   Ackintosh\Snidel\TaskInterface  $task
13
     * @return  string
14
     */
15
    public static function serialize(TaskInterface $task)
16
    {
17
        $callable = $task->getCallable();
18
        
19
        return serialize(new Task(
20
            (self::isClosure($callable) ? new SerializableClosure($callable) : $callable),
21
            $task->getArgs(),
22
            $task->getTag()
23
        ));
24
    }
25
26
    /**
27
     * @param   Ackintosh\Snidel\TaskInterface  $task
28
     * @return  string
29
     */
30
    public static function minifyAndSerialize(TaskInterface $task)
31
    {
32
        return serialize(self::minify($task));
33
    }
34
35
    /**
36
     * @param   Ackintosh\Snidel\TaskInterface  $task
37
     * @return  Ackintosh\Snidel\MinifiedTask
38
     */
39
    private static function minify(TaskInterface $task)
40
    {
41
        return new MinifiedTask(
42
            $task->getTag()
43
        );
44
    }
45
46
    /**
47
     * @param   string  $serializedTask
48
     * @return  \Ackintosh\Snidel\TaskInterface
49
     */
50
    public static function unserialize($serializedTask)
51
    {
52
        $task = unserialize($serializedTask);
53
        if (self::isClosure($callable = $task->getCallable())) {
54
            $task = new Task(
55
                $callable->getClosure(),
56
                $task->getArgs(),
57
                $task->getTag()
58
            );
59
        }
60
61
        return $task;
62
    }
63
64
    /**
65
     * @param   mixed   $callable
66
     * @return  bool
67
     */
68
    private static function isClosure($callable)
69
    {
70
        return is_object($callable) && is_callable($callable);
71
    }
72
}
73