@param [Seahorse::Model::Shapes::Structure] shape
# File lib/aws-sdk-core/xml/builder.rb, line 9 def initialize(shape) @shape = shape @xml = [] @builder = ::Builder::XmlMarkup.new(target: @xml, indent: 2) end
@param [Hash] params @return [String] Returns an XML doc string.
# File lib/aws-sdk-core/xml/builder.rb, line 17 def to_xml(params) structure(@shape.location_name, @shape, params) @xml.join end
# File lib/aws-sdk-core/xml/builder.rb, line 109 def flat?(shape) shape.metadata('flattened') end
# File lib/aws-sdk-core/xml/builder.rb, line 49 def list(name, shape, values) if flat?(shape) values.each do |value| member(name, shape.member, value) end else node(name, shape) do values.each do |value| mname = shape.member.location_name || 'member' member(mname, shape.member, value) end end end end
# File lib/aws-sdk-core/xml/builder.rb, line 64 def member(name, shape, value) case shape.type when 'structure' then structure(name, shape, value) when 'list' then list(name, shape, value) when 'timestamp' then node(name, shape, shape.format_time(value, 'iso8601')) when 'blob' then node(name, shape, Base64.strict_encode64(value.read)) when 'map' then raise NotImplementedError, 'not supported' else node(name, shape, value.to_s) end end
The `args` list may contain:
* [] - empty, no value or attributes * [value] - inline element, no attributes * [value, attributes_hash] - inline element with attributes * [attributes_hash] - self closing element with attributes
Pass a block if you want to nest XML nodes inside. When doing this, you may not pass a value to the `args` list.
# File lib/aws-sdk-core/xml/builder.rb, line 86 def node(name, shape, *args, &block) attrs = args.last.is_a?(Hash) ? args.pop : {} attrs = shape_attrs(shape).merge(attrs) args << attrs @builder.__send__(name, *args, &block) end
# File lib/aws-sdk-core/xml/builder.rb, line 93 def shape_attrs(shape) if xmlns = shape.metadata('xmlNamespace') if prefix = xmlns['prefix'] { 'xmlns:' + prefix => xmlns['uri'] } else { 'xmlns' => xmlns['uri'] } end else {} end end
# File lib/aws-sdk-core/xml/builder.rb, line 24 def structure(name, shape, values) if values.empty? node(name, shape) else node(name, shape, structure_attrs(shape, values)) do shape.members.each do |member_name, member_shape| unless values[member_name].nil? next if xml_attribute?(member_shape) mname = member_shape.location_name || member_name.to_s member(mname, member_shape, values[member_name]) end end end end end
# File lib/aws-sdk-core/xml/builder.rb, line 40 def structure_attrs(shape, values) shape.members.inject({}) do |attrs, (member_name, member_shape)| if xml_attribute?(member_shape) && values.key?(member_name) attrs[member_shape.location_name] = values[member_name] end attrs end end
# File lib/aws-sdk-core/xml/builder.rb, line 105 def xml_attribute?(shape) !!shape.metadata('xmlAttribute') end