Class: QingStor::SDK::Request
- Inherits:
-
Object
- Object
- QingStor::SDK::Request
- Defined in:
- lib/qingstor/sdk/request/request.rb
Instance Attribute Summary collapse
-
#http_request ⇒ Object
Returns the value of attribute http_request.
-
#http_response ⇒ Object
Returns the value of attribute http_response.
-
#input ⇒ Object
Returns the value of attribute input.
-
#request_url ⇒ Object
Returns the value of attribute request_url.
Instance Method Summary collapse
- #build ⇒ Object
-
#initialize(input) ⇒ Request
constructor
A new instance of Request.
- #send ⇒ Object
- #sign ⇒ Object
- #sign_query(timeout_seconds) ⇒ Object
- #unpack ⇒ Object
Constructor Details
#initialize(input) ⇒ Request
Returns a new instance of Request.
29 30 31 |
# File 'lib/qingstor/sdk/request/request.rb', line 29 def initialize(input) self.input = Preprocessor.preprocess input end |
Instance Attribute Details
#http_request ⇒ Object
Returns the value of attribute http_request.
27 28 29 |
# File 'lib/qingstor/sdk/request/request.rb', line 27 def http_request @http_request end |
#http_response ⇒ Object
Returns the value of attribute http_response.
27 28 29 |
# File 'lib/qingstor/sdk/request/request.rb', line 27 def http_response @http_response end |
#input ⇒ Object
Returns the value of attribute input.
27 28 29 |
# File 'lib/qingstor/sdk/request/request.rb', line 27 def input @input end |
#request_url ⇒ Object
Returns the value of attribute request_url.
27 28 29 |
# File 'lib/qingstor/sdk/request/request.rb', line 27 def request_url @request_url end |
Instance Method Details
#build ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# 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 ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# 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 ⇒ Object
54 55 56 57 58 59 60 61 |
# 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) ⇒ Object
63 64 65 66 67 68 69 70 |
# 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 ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# 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 |