Class: Google::Apis::Core::ApiCommand

Inherits:
HttpCommand show all
Defined in:
lib/google/apis/core/api_command.rb

Overview

Command for executing most basic API request with JSON requests/responses

Direct Known Subclasses

DownloadCommand

Constant Summary collapse

JSON_CONTENT_TYPE =
'application/json'
FIELDS_PARAM =
'fields'
ERROR_REASON_MAPPING =
{
  'rateLimitExceeded' => Google::Apis::RateLimitError,
  'userRateLimitExceeded' => Google::Apis::RateLimitError,
  'projectNotLinked' => Google::Apis::ProjectNotLinkedError
}

Constants inherited from HttpCommand

HttpCommand::RETRIABLE_ERRORS

Instance Attribute Summary collapse

Attributes inherited from HttpCommand

#body, #connection, #header, #method, #options, #params, #query, #url

Instance Method Summary collapse

Methods inherited from HttpCommand

#apply_request_options, #authorization_refreshable?, #error, #execute, #initialize, #process_response, #success

Methods included from Logging

#logger

Constructor Details

This class inherits a constructor from Google::Apis::Core::HttpCommand

Instance Attribute Details

#request_objectObject

Request body to serialize


41
42
43
# File 'lib/google/apis/core/api_command.rb', line 41

def request_object
  @request_object
end

#request_representationGoogle::Apis::Core::JsonRepresentation

JSON serializer for request objects


37
38
39
# File 'lib/google/apis/core/api_command.rb', line 37

def request_representation
  @request_representation
end

#response_classObject

Class to instantiate when de-serializing responses


49
50
51
# File 'lib/google/apis/core/api_command.rb', line 49

def response_class
  @response_class
end

#response_representationGoogle::Apis::Core::JsonRepresentation

JSON serializer for response objects


45
46
47
# File 'lib/google/apis/core/api_command.rb', line 45

def response_representation
  @response_representation
end

Instance Method Details

#allow_form_encoding?Boolean


122
123
124
# File 'lib/google/apis/core/api_command.rb', line 122

def allow_form_encoding?
  request_representation.nil? && super
end

#check_status(status, header = nil, body = nil, message = nil)

This method returns an undefined value.

Check the response and raise error if needed

Raises:


103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/google/apis/core/api_command.rb', line 103

def check_status(status, header = nil, body = nil, message = nil)
  case status
  when 400, 402...500
    reason, message = parse_error(body)
    if reason
      message = sprintf('%s: %s', reason, message)
      raise ERROR_REASON_MAPPING[reason].new(
        message,
        status_code: status,
        header: header,
        body: body
      ) if ERROR_REASON_MAPPING.key?(reason)
    end
    super(status, header, body, message)
  else
    super(status, header, body, message)
  end
end

#decode_response_body(content_type, body) ⇒ Object

Deserialize the response body if present

noinspection RubyUnusedLocalVariable


79
80
81
82
83
84
85
86
87
# File 'lib/google/apis/core/api_command.rb', line 79

def decode_response_body(content_type, body)
  return super unless response_representation
  return super if options && options.skip_deserialization
  return super if content_type.nil?
  return nil unless content_type.start_with?(JSON_CONTENT_TYPE)
  instance = response_class.new
  response_representation.new(instance).from_json(body, unwrap: response_class)
  instance
end

#prepare!

This method returns an undefined value.

Serialize the request body


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/google/apis/core/api_command.rb', line 54

def prepare!
  if options && options.api_format_version
    header['X-Goog-Api-Format-Version'] = options.api_format_version.to_s
  end
  query[FIELDS_PARAM] = normalize_fields_param(query[FIELDS_PARAM]) if query.key?(FIELDS_PARAM)
  if request_representation && request_object
    header['Content-Type'] ||= JSON_CONTENT_TYPE
    if options && options.skip_serialization
      self.body = request_object
    else
      self.body = request_representation.new(request_object).to_json(user_options: { skip_undefined: true })
    end
  end
  super
end