class QingStor::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/qingstor/sdk/request/request.rb, line 29 def initialize(input) self.input = Preprocessor.preprocess input end
Public Instance Methods
build()
click to toggle source
# File lib/qingstor/sdk/request/request.rb, line 72 def build params = input[:request_params].map { |k, v| "#{k}=#{v}" } query_string = params.join '&' if query_string && !query_string.empty? query_string = "#{input[:request_uri].include?('?') ? '&' : '?'}#{query_string}" end self.request_url = "#{input[:request_endpoint]}#{input[:request_uri]}#{query_string}" request = new_http_request input[:request_method], request_url request.body = input[:request_body] input[:request_headers].each { |k, v| request[k.to_s] = v } self.http_request = request end
send()
click to toggle source
# File lib/qingstor/sdk/request/request.rb, line 33 def send check sign build retries = input[:config][:connection_retries] while begin Logger.info "Sending QingStor 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 unpack end
sign()
click to toggle source
# File lib/qingstor/sdk/request/request.rb, line 54 def sign check if Signer.is_anonymous? input Logger.warn 'anonymous api call, skip sign' return end self.input = Signer.sign input end
sign_query(timeout_seconds)
click to toggle source
# File lib/qingstor/sdk/request/request.rb, line 63 def sign_query(timeout_seconds) check if Signer.is_anonymous? input Logger.warn 'anonymous api call, skip sign query' return end self.input = Signer.sign_query input, Time.now.to_i + timeout_seconds end
unpack()
click to toggle source
# File lib/qingstor/sdk/request/request.rb, line 87 def unpack output = {} output['status_code'] = http_response.code.to_i http_response.each_header { |k, v| output[k.tr('-', '_')] = v } if http_response['Content-Type'].include? 'application/json' unless http_response.body.nil? JSON.parse(http_response.body).each { |k, v| output[k] = v } end else output[:body] = http_response.body end display = {} output.each { |k, v| display[k] = v unless k.to_s == 'body' } Logger.info "Parse QingStor response: [#{input[:id]}] #{display}" output.deep_symbolize_keys! end
Private Instance Methods
check()
click to toggle source
# File lib/qingstor/sdk/request/request.rb, line 108 def check # ak and sk should be both set or not set if input[:config][:access_key_id].blank? && input[:config][:secret_access_key].present? raise SDKError, 'access key not provided' end if input[:config][:secret_access_key].blank? && input[:config][:access_key_id].present? raise SDKError, 'secret access key not provided' end end
new_http_request(method, url)
click to toggle source
# File lib/qingstor/sdk/request/request.rb, line 118 def new_http_request(method, url) case method when 'GET' Net::HTTP::Get.new url when 'POST' Net::HTTP::Post.new url when 'PUT' Net::HTTP::Put.new url when 'HEAD' Net::HTTP::Head.new url when 'DELETE' Net::HTTP::Delete.new url when 'OPTIONS' Net::HTTP::Options.new url else Logger.error "Request method \"#{method}\" not supported, fallback to GET``" Net::HTTP::Get.new url end end