This class wraps a result returned by an API call.
@return [Google::APIClient::Request] Original request object
@return [Google::APIClient::Request] Original request object
@return [Faraday::Response] HTTP response
Init the result
@param [Google::APIClient::Request] request
The original request
@param [Faraday::Response] response
Raw HTTP Response
# File lib/google/api_client/result.rb, line 30 def initialize(request, response) @request = request @response = response @media_upload = reference if reference.kind_of?(ResumableUpload) end
Return parsed version of the response body.
@!attribute [r] data @return [Object, Hash, String]
Object if body parsable from API schema, Hash if JSON, raw body if unable to parse
# File lib/google/api_client/result.rb, line 137 def data return @data ||= (begin if self.data? media_type = self.media_type data = self.body case media_type when 'application/json' data = MultiJson.load(data) # Strip data wrapper, if present data = data['data'] if data.has_key?('data') else raise ArgumentError, "Content-Type not supported for parsing: #{media_type}" end if @request.api_method && @request.api_method.response_schema # Automatically parse using the schema designated for the # response of this API method. data = @request.api_method.response_schema.new(data) data else # Otherwise, return the raw unparsed value. # This value must be indexable like a Hash. data end end end) end
Check for parsable data in response
@!attribute [r] data? @return [TrueClass, FalseClass]
true if body can be parsed
# File lib/google/api_client/result.rb, line 127 def data? !(self.body.nil? || self.body.empty? || self.media_type != 'application/json') end
Check if request failed
@!attribute [r] error? @return [TrueClass, FalseClass]
true if result of operation is an error
# File lib/google/api_client/result.rb, line 87 def error? return self.response.status >= 400 end
Extracts error messages from the response body
@!attribute [r] #error_message @return [String]
error message, if available
# File lib/google/api_client/result.rb, line 107 def error_message if self.data? if self.data.respond_to?(:error) && self.data.error.respond_to?(:message) # You're going to get a terrible error message if the response isn't # parsed successfully as an error. return self.data.error.message elsif self.data['error'] && self.data['error']['message'] return self.data['error']['message'] end end return self.body end
Get the content type of the response @!attribute [r] #media_type @return [String]
Value of content-type header
# File lib/google/api_client/result.rb, line 70 def media_type _, content_type = self.headers.detect do |h, v| h.downcase == 'Content-Type'.downcase end if content_type return content_type[%r^([^;]*);?.*$/, 1].strip.downcase else return nil end end
Build a request for fetching the next page of data
@return [Google::APIClient::Request]
API request for retrieving next page
# File lib/google/api_client/result.rb, line 186 def next_page merged_parameters = Hash[self.reference.parameters].merge({ self.page_token_param => self.next_page_token }) # Because Requests can be coerced to Hashes, we can merge them, # preserving all context except the API method parameters that we're # using for pagination. return Google::APIClient::Request.new( Hash[self.reference].merge(:parameters => merged_parameters) ) end
Get the token used for requesting the next page of data
@!attribute [r] #next_page_token @return [String]
next page token
# File lib/google/api_client/result.rb, line 171 def next_page_token if self.data.respond_to?(:next_page_token) return self.data.next_page_token elsif self.data.respond_to?(:[]) return self.data["nextPageToken"] else raise TypeError, "Data object did not respond to #next_page_token." end end
Name of the field that contains the pagination token
@!attribute [r] #page_token_param @return [String]
currently always 'pageToken'
# File lib/google/api_client/result.rb, line 247 def page_token_param return "pageToken" end
Pagination scheme used by this request/response
@!attribute [r] #pagination_type @return [Symbol]
currently always :token
# File lib/google/api_client/result.rb, line 237 def pagination_type return :token end
Build a request for fetching the previous page of data
@return [Google::APIClient::Request]
API request for retrieving previous page
# File lib/google/api_client/result.rb, line 219 def prev_page merged_parameters = Hash[self.reference.parameters].merge({ self.page_token_param => self.prev_page_token }) # Because Requests can be coerced to Hashes, we can merge them, # preserving all context except the API method parameters that we're # using for pagination. return Google::APIClient::Request.new( Hash[self.reference].merge(:parameters => merged_parameters) ) end
Get the token used for requesting the previous page of data
@!attribute [r] #prev_page_token @return [String]
previous page token
# File lib/google/api_client/result.rb, line 204 def prev_page_token if self.data.respond_to?(:prev_page_token) return self.data.prev_page_token elsif self.data.respond_to?(:[]) return self.data["prevPageToken"] else raise TypeError, "Data object did not respond to #next_page_token." end end
@!attribute [r] #resumable_upload @return [Google::APIClient::ResumableUpload] For resuming media uploads
# File lib/google/api_client/result.rb, line 55 def resumable_upload @media_upload ||= ( options = self.reference.to_hash.merge( :uri => self.headers['location'], :media => self.reference.media ) Google::APIClient::ResumableUpload.new(options) ) end
Check if request was successful
@!attribute [r] success? @return [TrueClass, FalseClass]
true if result of operation was successful
# File lib/google/api_client/result.rb, line 97 def success? return !self.error? end