class QingCloud::SDK::Request

Attributes

http_request[RW]
http_response[RW]
input[RW]
request_url[RW]

Public Class Methods

new(input) click to toggle source
# File lib/qingcloud/sdk/request/request.rb, line 26
def initialize(input)
  self.input = Preprocessor.do input
end

Public Instance Methods

send() click to toggle source
# File lib/qingcloud/sdk/request/request.rb, line 30
def send
  check
  build
  perform
  unpack
end

Private Instance Methods

build() click to toggle source
# File lib/qingcloud/sdk/request/request.rb, line 48
def build
  self.input = Signer.do input

  params           = input[:request_params].map { |k, v| "#{k}=#{v}" }
  query_string     = !params.empty? ? "?#{params.join '&'}" : ''
  self.request_url = "#{input[:request_endpoint]}#{input[:config][:uri]}#{query_string}"

  self.http_request = Net::HTTP::Get.new request_url
end
check() click to toggle source
# File lib/qingcloud/sdk/request/request.rb, line 39
def check
  unless !input[:config][:qy_access_key_id].nil? && !input[:config][:qy_access_key_id].empty?
    raise SDKError, 'access key not provided'
  end
  unless !input[:config][:qy_secret_access_key].nil? && !input[:config][:qy_secret_access_key].empty?
    raise SDKError, 'secret access key not provided'
  end
end
perform() click to toggle source
# File lib/qingcloud/sdk/request/request.rb, line 58
def perform
  retries = input[:config][:connection_retries]
  while
    begin
      Logger.info "Sending request: [#{input[:id]}] #{request_url}"
      self.http_response = input[:config].connection.request request_url, http_request
    rescue SocketError
      retries > 0 ? retries -= 1 : (raise NetworkError)
      sleep 1
      next
    end
    break
  end
end
unpack() click to toggle source
# File lib/qingcloud/sdk/request/request.rb, line 73
def unpack
  output = JSON.parse(http_response.body)
  Logger.info "Parse response: [#{input[:id]}] #{output}"
  output.deep_symbolize_keys!
end