class Aws::Query::ParamBuilder

Attributes

params[R]

@return [ParamList]

Public Class Methods

new(param_list) click to toggle source

@param [ParamList] param_list

# File lib/aws-sdk-core/query/param_builder.rb, line 8
def initialize(param_list)
  @params = param_list
end

Public Instance Methods

apply(shape, params) click to toggle source

Serializes the `params` hash onto {#param_list} following the rules provided by `shape`. rules provided by `shape`. @param [Seahorse::Model::Shapes::Structure] shape @param [Hash] params @return [void]

# File lib/aws-sdk-core/query/param_builder.rb, line 21
def apply(shape, params)
  structure(shape, params, '')
end

Private Instance Methods

flat?(shape) click to toggle source
# File lib/aws-sdk-core/query/param_builder.rb, line 99
def flat?(shape)
  !!shape.metadata('flattened')
end
format(shape, value, prefix) click to toggle source

@param [Seahorse::Model::Shapes::Shape] shape @param [Object] value @param [String] prefix

# File lib/aws-sdk-core/query/param_builder.rb, line 78
def format(shape, value, prefix)
  case shape.type
  when 'structure' then structure(shape, value, prefix + '.')
  when 'list'      then list(shape, value, prefix)
  when 'map'       then map(shape, value, prefix)
  when 'blob'      then set(prefix, Base64.strict_encode64(value.read))
  when 'timestamp'
    set(prefix, shape.format_time(value, 'iso8601').to_s)
  else
    set(prefix, value.to_s)
  end
end
list(list, values, prefix) click to toggle source

@param [Seahorse::Model::Shapes::List] list @param [Array] values @param [String] prefix

# File lib/aws-sdk-core/query/param_builder.rb, line 42
def list(list, values, prefix)
  if values.empty?
    set(prefix, '')
    return
  end
  if flat?(list)
    if name = query_name(list.member)
      parts = prefix.split('.')
      parts.pop
      parts.push(name)
      prefix = parts.join('.')
    end
  else
    prefix += '.member'
  end
  values.each.with_index do |value, n|
    format(list.member, value, "#{prefix}.#{n+1}")
  end
end
map(map, values, prefix) click to toggle source

@param [Seahorse::Model::Shapes::Map] map @param [Hash] values @param [String] prefix

# File lib/aws-sdk-core/query/param_builder.rb, line 65
def map(map, values, prefix)
  prefix += '.entry' unless flat?(map)
  key_name = "%s.%d.#{query_name(map.key, 'key')}"
  value_name  = "%s.%d.#{query_name(map.value, 'value')}"
  values.each.with_index do |(key, value), n|
    format(map.key, key, key_name % [prefix, n + 1])
    format(map.value, value, value_name % [prefix, n + 1])
  end
end
query_name(shape, default = nil) click to toggle source
# File lib/aws-sdk-core/query/param_builder.rb, line 91
def query_name(shape, default = nil)
  shape.location_name || default
end
set(name, value) click to toggle source
# File lib/aws-sdk-core/query/param_builder.rb, line 95
def set(name, value)
  params.set(name, value)
end
structure(structure, values, prefix) click to toggle source

@param [Seahorse::Model::Shapes::Structure] structure @param [Hash] values @param [String, nil] prefix

# File lib/aws-sdk-core/query/param_builder.rb, line 30
def structure(structure, values, prefix)
  values.each do |name, value|
    unless value.nil?
      member_shape = structure.member(name)
      format(member_shape, value, prefix + query_name(member_shape))
    end
  end
end