public function removeValue($value)
    {
        if (! $this->canHaveMultipleValues() && ! isset($value)) {
            $this->values = [];
            $this->enable($enable = false);

            return $this;
        }

        $this->assertValueIsValid($value);
        $this->assertCanHaveValue();

        if ($this->hasValue($value)) {
            $index = array_search($value, $this->values);
            unset($this->values[$index]);
            $this->values = array_values($this->values);
        }

        return $this;
    }