class AWS::Core::RESTRequestBuilder
Given a hash of request options, a REST::RequestHandler can populate a Core::Http::Request object.
Public Class Methods
new(operation, options = {})
click to toggle source
@api private
# File lib/aws/core/rest_request_builder.rb, line 22 def initialize operation, options = {} @http = operation[:http] @rules = operation[:inputs] @validator = Options::Validator.new(@rules) @serializer = case options[:format] when :xml namespace = options[:xmlnamespace] name = operation[:name] Options::XMLSerializer.new(namespace, name, operation) when :json Options::JSONSerializer.new(@rules, @http[:request_payload]) else raise ArgumentError, "unhandled format: #{options[:format]}" end end
Public Instance Methods
populate_request(request, params)
click to toggle source
Populates a Http::Request with the following:
* HTTP method * URI * headers * body
@param [Http::Request] request
@param [Hash] params The hash of request options provided
to the client request method. This will be used to populate the headers, uri and body.
@raise [ArgumentError] Raises ArgumentError when any of the
request options are invalid (wrong type, missing, unknown, etc).
# File lib/aws/core/rest_request_builder.rb, line 59 def populate_request request, params params = @validator.validate!(params) populate_method(request) populate_uri(request, params) populate_headers(request, params) populate_body(request, params) end
Private Instance Methods
extract_headers(params)
click to toggle source
@param [Hash] params @return [Hash]
# File lib/aws/core/rest_request_builder.rb, line 116 def extract_headers params headers = {} (@http[:request_headers] || {}).each_pair do |param,header| headers[header] = params[param] if params.key?(param) end headers end
extract_uri(params)
click to toggle source
@param [Hash] params @return [String]
# File lib/aws/core/rest_request_builder.rb, line 85 def extract_uri params path, querystring = @http[:uri].split(/\?/) uri = path.gsub(/:\w+/) do |param_name| if param = params.delete(param_name.sub(/^:/, '').to_sym) UriEscape.escape(param) else raise ArgumentError, "missing required option #{param_name}" end end querystring_parts = [] querystring.to_s.split(/&|;/).each do |part| param_name = part.match(/:(\w+)/)[1] if param = params.delete(param_name.to_sym) param = UriEscape.escape(param) querystring_parts << part.sub(/:#{param_name}/, param) end end unless querystring_parts.empty? uri << "?#{querystring_parts.join('&')}" end uri end
populate_body(request, params)
click to toggle source
@param [Hash] params @return [String,nil]
# File lib/aws/core/rest_request_builder.rb, line 126 def populate_body request, params if params.empty? request.body = nil elsif payload = streaming_param # streaming request request.body_stream = params[payload] request.headers['Content-Length'] = size(params[payload]) else request.body = @serializer.serialize(params) end end
populate_headers(request, params)
click to toggle source
# File lib/aws/core/rest_request_builder.rb, line 77 def populate_headers request, params extract_headers(params).each_pair do |header_name, header_value| request.headers[header_name] = header_value end end
populate_method(request)
click to toggle source
# File lib/aws/core/rest_request_builder.rb, line 69 def populate_method request request.http_method = @http[:verb] end
populate_uri(request, params)
click to toggle source
# File lib/aws/core/rest_request_builder.rb, line 73 def populate_uri request, params request.uri = extract_uri(params) end
size(payload)
click to toggle source
# File lib/aws/core/rest_request_builder.rb, line 137 def size(payload) if payload.respond_to?(:path) && payload.path File.size(payload.path) else payload.size end end
streaming_param()
click to toggle source
# File lib/aws/core/rest_request_builder.rb, line 145 def streaming_param if payload = @http[:request_payload] @rules[payload][:type] == :blob ? payload : nil end end