Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
27 / 27
Date
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
4 / 4
11
100.00% covered (success)
100.00%
27 / 27
 handle
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
12 / 12
 carbonBuilder
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
11 / 11
 setCarbonTimeOfTheDay
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
3 / 3
 unpluralize
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
1 / 1
1<?php
2
3namespace Qmp\Laravel\MongoJsExecutor\Replacers;
4
5use Carbon\Carbon;
6use Qmp\Laravel\MongoJsExecutor\Helpers\DateFormatter;
7
8class Date extends MongoJsParserReplacer
9{
10    /**
11     * Undocumented variable
12     *
13     * @var string
14     */
15    protected $search = ["/new Date\(.*?\)/", "/[\"']?@DATE[-A-Z0-9\|]*[\"']?/"];
16
17
18    /**
19     * Undocumented variable
20     *
21     * @var string
22     */
23    protected $matchPattern = "/\((?:'|\")(.*)(?:'|\")\)/";
24
25    /**
26     * Undocumented variable
27     *
28     * @var array
29     */
30    protected $carbonMethods = ['startof' => 'startOfDay', 'endof' => 'endOfDay'];
31
32    /**
33     * Undocumented function
34     *
35     * @return string
36     */
37    public function handle($json)
38    {
39        return $this->prc($this->search, function ($date) {
40            $tempdate = str_replace('"', '', $date[0]);
41
42            if (substr($tempdate, 0, 5) === '@DATE') {
43                $type = explode('-', $tempdate);
44                array_shift($type);
45                $type = implode('-', $type);
46                $carbon = $this->carbonBuilder(strtolower($type));
47
48            } else {
49                $dateValue = [];
50                preg_match($this->matchPattern, $date[0], $dateValue);
51                $carbon = count($dateValue) ? new Carbon($dateValue[1]) : DateFormatter::carbonDate('now');
52            }
53
54
55        
56
57            return DateFormatter::toJson($carbon);
58        }, $json);
59    }
60
61    /**
62     * Undocumented function
63     *
64     * @param string $type
65     * @return Carbon
66     */
67    protected function carbonBuilder($type)
68    {
69        $query = explode('-', $type);
70        $startEnd = null;
71
72        if (in_array(strtolower($query[0]), array_keys($this->carbonMethods))) {
73            $startEnd = $this->carbonMethods[strtolower($query[0])];
74            array_shift($query);
75        }
76
77        $carbon = DateFormatter::carbonDate($query[0]);
78
79        if (count($query) < 2) {
80            return $this->setCarbonTimeOfTheDay($carbon, $startEnd);
81        }
82
83        $method = $query[1] . ucfirst($this->unpluralize($query[3]));
84        $carbon = $carbon->$method($query[2]);
85
86        return $this->setCarbonTimeOfTheDay($carbon, $startEnd);
87    }
88
89    /**
90     * Undocumented function
91     *
92     * @param Carbon $carbon
93     * @param String|null $method
94     * @return Carbon
95     */
96    protected function setCarbonTimeOfTheDay($carbon, $method)
97    {
98        if ($method && in_array($method, array_values($this->carbonMethods))) {
99            return $carbon->$method();
100        }
101
102        return $carbon;
103    }
104
105    /**
106     * Undocumented function
107     *
108     * @param string $str
109     * @return string
110     */
111    protected function unpluralize($str)
112    {
113        return substr($str, -1, 1) === 's' ? substr($str, 0, -1) : $str;
114    }
115}