class MsRest::HttpOperationRequest
Class which represents the data received and deserialized from server.
Attributes
@return [String] base uri of the request
@return [String] the HTTP response body.
@return [Hash] request headers
@return [String] full - to log requests, responses and bodies, partial - just requests and responses without body
@return [String] http request method
@return [Array] the list of middlewares to apply to the Request
@return [Hash] path parameters to be ERB::Util.url_encode encoded
@return [String] path template /{replace}/{url_param}
@return [Hash] query parameters to be ERB::Util.url_encode encoded
@return [Hash] path parameters not to be ERB::Util.url_encode encoded
@return [Hash] query parameters to be ERB::Util.url_encode encoded
@return [Array] strings to be appended to the user agent in the request
Public Class Methods
Creates and initialize new instance of the HttpOperationResponse class. @param [String|URI] base uri for requests @param [String] path template /{replace}/{url_param} @param [String] http method for the request @param [Hash] body the HTTP response body.
# File lib/ms_rest/http_operation_request.rb, line 51 def initialize(base_uri, path_template, method, options = {}) fail 'path_template must not be nil' if path_template.nil? fail 'method must not be nil' if method.nil? @base_uri = base_uri || '' @path_template = path_template @method = method @headers = {} @user_agent_extended = [] options.each do |k,v| instance_variable_set("@#{k}", v) unless v.nil? end end
Public Instance Methods
Creates a path from the path template and the #path_params and #skip_encoding_path_params @return [URI] body the HTTP response body.
# File lib/ms_rest/http_operation_request.rb, line 97 def build_path template = path_template.dup path_params.each{ |key, value| template["{#{key}}"] = ERB::Util.url_encode(value) if template.include?("{#{key}}") } unless path_params.nil? skip_encoding_path_params.each{ |key, value| template["{#{key}}"] = value } unless skip_encoding_path_params.nil? path = URI.parse(template.gsub(/([^:]|\A)\/\//, '\1/')) unless skip_encoding_query_params.nil? path.query = [(path.query || ""), skip_encoding_query_params.reject{|_, v| v.nil?}.map{|k,v| "#{k}=#{v}"}].join('&') end path end
# File lib/ms_rest/http_operation_request.rb, line 108 def full_uri URI.join(base_uri || '', build_path) end
Creates a promise which will execute the request. Block will yield the request for customization. @return [URI] body the HTTP response body.
# File lib/ms_rest/http_operation_request.rb, line 68 def run_promise(&block) Concurrent::Promise.new do @connection ||= Faraday.new(:url => base_uri, :ssl => MsRest.ssl_options) do |faraday| middlewares.each{ |args| faraday.use(*args) } unless middlewares.nil? faraday.adapter Faraday.default_adapter logging = ENV['AZURE_HTTP_LOGGING'] || log if logging faraday.response :logger, nil, { :bodies => logging == 'full' } end end loop do @response = @connection.run_request(:"#{method}", build_path, body, {'User-Agent' => user_agent}.merge(headers)) do |req| req.params = req.params.merge(query_params.reject{|_, v| v.nil?}) unless query_params.nil? yield(req) if block_given? end break if ((@response.status != 429) || (@response.status == 429 && @response.headers['retry-after'].nil?)) if(@response.status == 429 && !@response.headers['retry-after'].nil?) sleep(@response.headers['retry-after'].to_i) end end @response end end
# File lib/ms_rest/http_operation_request.rb, line 116 def to_json(*a) { base_uri: base_uri, path_template: path_template, method: method, path_params: path_params, skip_encoding_path_params: skip_encoding_path_params, query_params: query_params, skip_encoding_query_params: skip_encoding_query_params, headers: headers, body: body, middlewares: middlewares, log: log }.to_json(*a) end
# File lib/ms_rest/http_operation_request.rb, line 112 def user_agent "Ruby/#{RUBY_VERSION} (#{RUBY_PLATFORM}) #{user_agent_extended.join(' ')}" end