public function addQueryData($data)
    {
        if (is_string($data)) {
            $data = self::decodeQueryString($data);
        }
        else if (is_object($data)) {
            $data = (array) $data;
        }
        else if (!is_array($data)) {
            throw new \InvalidArgumentException(
                "invalid value provided for 'query'; ".
                "expecting a string, array, or object"
            );
        }

        foreach ($data as $k => $v) {
            Arr::addValue($this->query, $k, $v);
        }
        return $this;
    }