class Google::APIClient::Service::Request

Handles an API request. This contains a full definition of the request to be made (including method name, parameters, body and media). The remote API call can be invoked with execute().

Attributes

method[R]

Returns the Method instance that describes the API method invoked by the request.

@return [Google::APIClient::Method] The API method description.

parameters[RW]

Contains the Hash of parameter names and values to be sent as the parameters for the API call.

@return [Hash] The request parameters.

service[R]

Returns the parent service capable of executing this request.

@return [Google::APIClient::Service] The parent service.

Public Class Methods

new(service, method, parameters) click to toggle source

Build a request. This class should not be directly instantiated in user code; instantiation is handled by the stub methods created on Service and Resource objects.

@param [Google::APIClient::Service] service

The parent Service instance that will execute the request.

@param [Google::APIClient::Method] method

The Method instance that describes the API method invoked by the
request.

@param [Hash] parameters

A Hash of parameter names and values to be sent in the API call.
# File lib/google/api_client/service/request.rb, line 37
def initialize(service, method, parameters)
  @service = service
  @method = method
  @parameters = parameters
  @body = nil
  @media = nil

  metaclass = (class << self; self; end)

  # If applicable, add "body", "body=" and resource-named methods for
  # retrieving and setting the HTTP body for this request.
  # Examples of setting the body for files.insert in the Drive API:
  #   request.body = object
  #   request.execute
  #  OR
  #   request.file = object
  #   request.execute
  #  OR
  #   request.body(object).execute
  #  OR
  #   request.file(object).execute
  # Examples of retrieving the body for files.insert in the Drive API:
  #   object = request.body
  #  OR
  #   object = request.file
  if method.request_schema
    body_name = method.request_schema.data['id'].dup
    body_name[0] = body_name[0].chr.downcase
    body_name_equals = (body_name + '=').to_sym
    body_name = body_name.to_sym

    metaclass.send(:define_method, :body) do |*args|
      if args.length == 1
        @body = args.first
        return self
      elsif args.length == 0
        return @body
      else
        raise ArgumentError,
          "wrong number of arguments (#{args.length}; expecting 0 or 1)"
      end
    end

    metaclass.send(:define_method, :body=) do |body|
      @body = body
    end

    metaclass.send(:alias_method, body_name, :body)
    metaclass.send(:alias_method, body_name_equals, :body=)
  end

  # If applicable, add "media" and "media=" for retrieving and setting
  # the media object for this request.
  # Examples of setting the media object:
  #   request.media = object
  #   request.execute
  #  OR
  #   request.media(object).execute
  # Example of retrieving the media object:
  #   object = request.media
  if method.media_upload
    metaclass.send(:define_method, :media) do |*args|
      if args.length == 1
        @media = args.first
        return self
      elsif args.length == 0
        return @media
      else
        raise ArgumentError,
          "wrong number of arguments (#{args.length}; expecting 0 or 1)"
      end
    end

    metaclass.send(:define_method, :media=) do |media|
      @media = media
    end
  end
end

Public Instance Methods

execute() click to toggle source

Executes the request.

# File lib/google/api_client/service/request.rb, line 138
def execute
  @service.execute(self)
end