Given a hash of request options, a REST::RequestHandler can populate a Core::Http::Request object.
@private
# File lib/aws/core/rest_request_builder.rb, line 24 def initialize namespace, operation @http = operation[:http] @rules = operation[:inputs] @validator = Options::Validator.new(@rules) @xml_serializer = Options::XMLSerializer.new( namespace, operation[:name], @rules) end
Populates an http request object with params in the uri, headers, and body. @param [Http::Request] request @param [Hash] request_options A hash of options to send with
the request.
@raise [ArgumentError] Raises ArgumentError when any of the
request options are invalid (wrong type, missing, unknown, etc).
@return [Http::Request]
# File lib/aws/core/rest_request_builder.rb, line 45 def populate_request request, request_options params = @validator.validate!(request_options) request.http_method = @http[:verb] request.uri = extract_uri(params) extract_headers(params).each_pair do |header_name, header_value| request.headers[header_name] = header_value end request.body = build_body(params) request end
@param [Hash] params @return [String,nil]
# File lib/aws/core/rest_request_builder.rb, line 106 def build_body params if params.empty? nil else if payload = @http[:request_payload] and @rules[payload][:type] != :hash then params[payload] else @xml_serializer.serialize(params) end end end
@param [Hash] params @return [Hash]
# File lib/aws/core/rest_request_builder.rb, line 94 def extract_headers params headers = {} (@http[:request_headers] || {}).each_pair do |param_name,header_name| if param_value = params.delete(param_name) headers[header_name] = param_value end end headers end
@param [Hash] params @return [String]
# File lib/aws/core/rest_request_builder.rb, line 63 def extract_uri params path, querystring = @http[:uri].split(%r\?/) uri = path.gsub(%r:\w+/) do |param_name| unless param = params.delete(param_name[1..-1].to_sym) msg = "missing required uri argument :#{param_name[1..-1]}" raise ArgumentError, msg end UriEscape.escape(param) end querystring_parts = [] querystring.to_s.split(%r&/).each do |part| param_name = part.match(%r:(\w+)/)[1] if param = params.delete(param_name.to_sym) param = UriEscape.escape(param) querystring_parts << part.sub(%r:#{param_name}/, param) end end unless querystring_parts.empty? uri << "?#{querystring_parts.join('&')}" end uri end