class Google::APIClient::Result

This class wraps a result returned by an API call.

Attributes

reference[R]

@return [Google::APIClient::Request] Original request object

request[R]

@return [Google::APIClient::Request] Original request object

response[R]

@return [Faraday::Response] HTTP response

Public Class Methods

new(request, response) click to toggle source

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

Public Instance Methods

data() click to toggle source

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
data?() click to toggle source

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
error?() click to toggle source

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
error_message() click to toggle source

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
media_type() click to toggle source

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[/^([^;]*);?.*$/, 1].strip.downcase
  else
    return nil
  end
end
next_page() click to toggle source

Build a request for fetching the next page of data

@return [Google::APIClient::Request]

API request for retrieving next page, nil if no page token available
# File lib/google/api_client/result.rb, line 186
def next_page
  return nil unless self.next_page_token
  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
next_page_token() click to toggle source

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
page_token_param() click to toggle source

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 249
def page_token_param
  return "pageToken"
end
pagination_type() click to toggle source

Pagination scheme used by this request/response

@!attribute [r] #pagination_type @return [Symbol]

currently always :token
# File lib/google/api_client/result.rb, line 239
def pagination_type
  return :token
end
prev_page() click to toggle source

Build a request for fetching the previous page of data

@return [Google::APIClient::Request]

API request for retrieving previous page, nil if no page token available
# File lib/google/api_client/result.rb, line 220
def prev_page
  return nil unless self.prev_page_token
  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
prev_page_token() click to toggle source

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 205
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
resumable_upload() click to toggle source

@!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
success?() click to toggle source

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