def run
      if matches_expectations?
        response.tap{parse_response!}
      elsif run_again?
        run
      else
        raise response_error, error_message.to_json
      end
    end
def run
      if matches_expectations?
        response.tap{parse_response!}
      elsif run_again?
        run
      else
        raise response_error, error_message.to_json
      end
    end
Initializes a Request object.
 @param [Hash] options the options for the request.
 @option options [String, Symbol] :method (:get) The HTTP method to use.
 @option options [Class] :expected_response (Net::HTTPSuccess) The class
   of response that the request should obtain when run.
 @option options [String, Symbol] :response_format (:json) The expected
   format of the response body. If passed, the response body will be
   parsed according to the format before being returned.
 @option options [String] :host The host component of the request URI.
 @option options [String] :path The path component of the request URI.
 @option options [Hash] :params ({}) The params to use as the query
   component of the request URI, for instance the Hash +{a: 1, b: 2}+
   corresponds to the query parameters "a=1&b=2".
 @option options [Hash] :camelize_params (true) whether to transform
   each key of params into a camel-case symbol before sending the request.
 @option options [Hash] :request_format (:json) The format of the
   request body. If a request body is passed, it will be parsed
   according to this format before sending it in the request.
 @option options [#size] :body The body component of the request.
 @option options [Hash] :headers ({}) The headers component of the
   request.
 @option options [#access_token, #refreshed_access_token?] :auth The
   authentication object. If set, must respond to +access_token+ and
   return the OAuth token to make an authenticated request, and must
   respond to +refreshed_access_token?+ and return whether the access
   token can be refreshed if expired.
 Sends the request and returns the response.
 If the request fails once for a temporary server error or an expired
 token, tries the request again before eventually raising an error.
 @return [Net::HTTPResponse] if the request succeeds and matches the
   expectations, the response with the body appropriately parsed.
 @raise [Yt::RequestError] if the request fails or the response does
   not match the expectations.