class Aws::Rest::Request::QuerystringBuilder

Constants

SUPPORTED_TYPES

Public Instance Methods

build(params) click to toggle source

Provide shape references and param values:

[
  [shape_ref1, 123],
  [shape_ref2, "text"]
]

Returns a querystring:

"Count=123&Words=text"

@param [Array<Array<Seahorse::Model::ShapeRef, Object>>] params An array of

model shape references and request parameter value pairs.

@return [String] Returns a built querystring

# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 32
def build(params)
  # keys in query maps must NOT override other keys
  query_keys = query_keys(params)
  params.map do |(shape_ref, param_value)|
    build_part(shape_ref, param_value, query_keys)
  end.reject { |p| p.nil? || p.empty? }.join('&')
end

Private Instance Methods

build_part(shape_ref, param_value, query_keys) click to toggle source
# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 50
def build_part(shape_ref, param_value, query_keys)
  case shape_ref.shape
  # supported scalar types
  when *SUPPORTED_TYPES
    "#{shape_ref.location_name}=#{query_value(shape_ref, param_value)}"
  when MapShape
    generate_query_map(shape_ref, param_value, query_keys)
  when ListShape
    generate_query_list(shape_ref, param_value)
  else
    raise NotImplementedError
  end
end
escape(string) click to toggle source
# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 125
def escape(string)
  Seahorse::Util.uri_escape(string)
end
generate_query_list(ref, values) click to toggle source
# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 85
def generate_query_list(ref, values)
  member_ref = ref.shape.member
  values.map do |value|
    value = query_value(member_ref, value)
    "#{ref.location_name}=#{value}"
  end
end
generate_query_map(ref, value, query_keys) click to toggle source
# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 93
def generate_query_map(ref, value, query_keys)
  case ref.shape.value.shape
  when StringShape
    query_map_of_string(value, query_keys)
  when ListShape
    query_map_of_string_list(value, query_keys)
  else
    msg = 'Only map of string and string list supported'
    raise NotImplementedError, msg
  end
end
query_keys(params) click to toggle source
# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 42
def query_keys(params)
  keys = Set.new
  params.each do |(shape_ref, _)|
    keys << shape_ref.location_name unless shape_ref.shape.is_a?(MapShape)
  end
  keys
end
query_map_of_string(hash, query_keys) click to toggle source
# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 105
def query_map_of_string(hash, query_keys)
  list = []
  hash.each_pair do |key, value|
    key = escape(key)
    list << "#{key}=#{escape(value)}" unless query_keys.include?(key)
  end
  list
end
query_map_of_string_list(hash, query_keys) click to toggle source
# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 114
def query_map_of_string_list(hash, query_keys)
  list = []
  hash.each_pair do |key, values|
    key = escape(key)
    values.each do |value|
      list << "#{key}=#{escape(value)}" unless query_keys.include?(key)
    end
  end
  list
end
query_value(ref, value) click to toggle source
# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 74
def query_value(ref, value)
  case ref.shape
  when TimestampShape
    escape(timestamp(ref, value))
  when *SUPPORTED_TYPES
    escape(value.to_s)
  else
    raise NotImplementedError
  end
end
timestamp(ref, value) click to toggle source
# File lib/aws-sdk-core/rest/request/querystring_builder.rb, line 64
def timestamp(ref, value)
  case ref['timestampFormat'] || ref.shape['timestampFormat']
  when 'unixTimestamp' then value.to_i
  when 'rfc822' then value.utc.httpdate
  else
    # querystring defaults to iso8601
    value.utc.iso8601
  end
end