class Aws::Rest::Request::Endpoint
Public Class Methods
new(rules, request_uri_pattern)
click to toggle source
@param [Seahorse::Model::Shapes::ShapeRef] rules @param [String] request_uri_pattern
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 12 def initialize(rules, request_uri_pattern) @rules = rules request_uri_pattern.split('?').tap do |path_part, query_part| @path_pattern = path_part @query_pattern = query_part end end
Public Instance Methods
uri(base_uri, params)
click to toggle source
@param [URI::HTTPS,URI::HTTP] base_uri @param [Hash,Struct] params @return [URI::HTTPS,URI::HTTP]
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 23 def uri(base_uri, params) uri = URI.parse(base_uri.to_s) apply_path_params(uri, params) apply_querystring_params(uri, params) uri end
Private Instance Methods
apply_path_params(uri, params)
click to toggle source
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 32 def apply_path_params(uri, params) path = uri.path.sub(/\/$/, '') + @path_pattern.split('?')[0] uri.path = path.gsub(/{\w+\+?}/) do |placeholder| param_value_for_placeholder(placeholder, params) end end
apply_querystring_params(uri, params)
click to toggle source
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 52 def apply_querystring_params(uri, params) parts = [] parts << @query_pattern if @query_pattern @rules.shape.members.each do |member_name, member| if member.location == 'querystring' && !params[member_name].nil? case member.shape # supported scalar types when StringShape, BooleanShape, FloatShape, IntegerShape, StringShape param_name = member.location_name param_value = params[member_name] parts << "#{param_name}=#{escape(param_value.to_s)}" # map of strings or map of string-list when MapShape if StringShape === member.shape.value.shape parts += query_map_of_string(params[member_name]) elsif ListShape === member.shape.value.shape parts += query_map_of_string_list(params[member_name]) else msg = "only map of string and string list supported" raise NotImplementedError, msg end when ListShape if StringShape === member.shape.member.shape parts += list_of_strings(member.location_name, params[member_name]) else msg = "Only list of strings supported, got " msg << member.shape.member.shape.class.name raise NotImplementedError, msg end # unsupported querystring shape else raise NotImplementedError end end end uri.query = parts.empty? ? nil : parts.join('&') end
escape(string)
click to toggle source
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 119 def escape(string) Seahorse::Util.uri_escape(string) end
list_of_strings(name, values)
click to toggle source
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 113 def list_of_strings(name, values) values.map do |value| "#{name}=#{escape(value)}" end end
param_name(placeholder)
click to toggle source
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 46 def param_name(placeholder) location_name = placeholder.gsub(/[{}+]/,'') param_name, _ = @rules.shape.member_by_location_name(location_name) param_name end
param_value_for_placeholder(placeholder, params)
click to toggle source
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 39 def param_value_for_placeholder(placeholder, params) value = params[param_name(placeholder)].to_s placeholder.include?('+') ? value.gsub(/[^\/]+/) { |v| escape(v) } : escape(value) end
query_map_of_string(hash)
click to toggle source
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 95 def query_map_of_string(hash) list = [] hash.each_pair do |key, value| list << "#{escape(key)}=#{escape(value)}" end list end
query_map_of_string_list(hash)
click to toggle source
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 103 def query_map_of_string_list(hash) list = [] hash.each_pair do |key, values| values.each do |value| list << "#{escape(key)}=#{escape(value)}" end end list end