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