Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
22 / 22
TemporaAbstract
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
10
100.00% covered (success)
100.00%
22 / 22
 __construct
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
6 / 6
 validate
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
15 / 15
 floatDiff
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 validateDateTime
n/a
0 / 0
1
n/a
0 / 0
<?php
namespace Verja\Validator;
use Verja\Error;
use Verja\Validator;
abstract class TemporaAbstract extends Validator
{
    /** @var \DateTime */
    protected $dateTime;
    /** @var string */
    protected $errorKey;
    /** @var string */
    protected $errorMessage;
    /**
     * After constructor.
     *
     * @param \DateTime|string $dateTime
     * @throws \InvalidArgumentException
     */
    public function __construct($dateTime)
    {
        if (!$dateTime instanceof \DateTime) {
            if (is_string($dateTime)) {
                $dateTime = new \DateTime($dateTime);
            } else {
                throw new \InvalidArgumentException('$dateTime has to be a DateTime object or time string');
            }
        }
        $this->dateTime = $dateTime;
    }
    /**
     * Validate $value
     *
     * @param mixed $value
     * @param array $context
     * @return bool
     */
    public function validate($value, array $context = []): bool
    {
        if (is_string($value)) {
            try {
                $original = $value;
                $value = new \DateTime($value);
            } catch (\Exception $e) {
                // returns in false after next if
            }
        }
        if ($value instanceof \DateTime) {
            if ($this->validateDateTime($value)) {
                return true;
            }
            $this->error = new Error(
                $this->errorKey,
                $original ?? $value,
                sprintf($this->errorMessage, $this->dateTime->format('c')),
                ['dateTime' => $this->dateTime]
            );
            return false;
        }
        $this->error = new Error('NO_DATE', $value, 'value should be a valid date', ['dateTime' => $this->dateTime]);
        return false;
    }
    protected function floatDiff(\DateTime $dt1, \DateTime $dt2)
    {
        return (float)$dt1->format('U.u') - (float)$dt2->format('U.u');
    }
    abstract protected function validateDateTime(\DateTime $value);
}