class Aws::Rest::Request::Endpoint

Public Class Methods

new(rules, request_uri_pattern) click to toggle source

@param [Seahorse::Model::Shapes::ShapeRef] @param [String] request_uri_pattern

# File lib/aws-sdk-core/rest/request/endpoint.rb, line 10
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 21
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 30
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 50
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?
      param_name = member.location_name
      param_value = params[member_name]
      parts << "#{param_name}=#{escape(param_value.to_s)}"
    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 63
def escape(string)
  Seahorse::Util.uri_escape(string)
end
param_name(placeholder) click to toggle source
# File lib/aws-sdk-core/rest/request/endpoint.rb, line 44
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 37
def param_value_for_placeholder(placeholder, params)
  value = params[param_name(placeholder)]
  placeholder.include?('+') ?
    value.gsub(/[^\/]+/) { |v| escape(v) } :
    escape(value)
end