public function remove($property)
    {
        if (!array_key_exists($property, $this->data)) {
            throw new InvalidArgumentException(sprintf('Property %s does not exist', $property));
        }

        $value = $this->data[$property];
        unset($this->data[$property]);

        return $value;
    }