class Aws::Rest::Request::Endpoint
def apply_path_params(uri, params)
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
def apply_querystring_params(uri, params)
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
def escape(string)
def escape(string) Seahorse::Util.uri_escape(string) end
def initialize(rules, request_uri_pattern)
-
request_uri_pattern
(String
) -- -
rules
(Seahorse::Model::Shapes::ShapeRef
) --
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
def list_of_strings(name, values)
def list_of_strings(name, values) values.map do |value| "#{name}=#{escape(value)}" end end
def param_name(placeholder)
def param_name(placeholder) location_name = placeholder.gsub(/[{}+]/,'') param_name, _ = @rules.shape.member_by_location_name(location_name) param_name end
def param_value_for_placeholder(placeholder, params)
def param_value_for_placeholder(placeholder, params) value = params[param_name(placeholder)].to_s placeholder.include?('+') ? value.gsub(/[^\/]+/) { |v| escape(v) } : escape(value) end
def query_map_of_string(hash)
def query_map_of_string(hash) list = [] hash.each_pair do |key, value| list << "#{escape(key)}=#{escape(value)}" end list end
def query_map_of_string_list(hash)
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
def uri(base_uri, params)
-
(URI::HTTPS, URI::HTTP)
-
Parameters:
-
params
(Hash, Struct
) -- -
base_uri
(URI::HTTPS, URI::HTTP
) --
def uri(base_uri, params) uri = URI.parse(base_uri.to_s) apply_path_params(uri, params) apply_querystring_params(uri, params) uri end