public function recover()
    {
        if (!$this->isRecoverable()) {
            throw new Exception\BadMethodCallException(
                sprintf(
                    "Object of class %s isn't recoverable",
                    get_class($this)
                )
            );
        }
        
        if ($this->isDeleted()) {
            $this->runCallbacks('recover', function() {
                $this->directUpdate(static::deletedAtAttribute(), static::deletedAtEmptyValue());
                $this->reload();
            });
        }
        
        return true;
    }