class Aws::Xml::Builder
Public Class Methods
new(rules, options = {})
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 9 def initialize(rules, options = {}) @rules = rules @xml = options[:target] || [] indent = options[:indent] || ' ' pad = options[:pad] || '' @builder = DocBuilder.new(target:@xml, indent:indent, pad:pad) end
Public Instance Methods
to_xml(params)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 17 def to_xml(params) structure(@rules.location_name, @rules, params) @xml.join end
Also aliased as: serialize
Private Instance Methods
blob(value)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 88 def blob(value) value = value.read unless String === value Base64.strict_encode64(value) end
list(name, ref, values)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 48 def list(name, ref, values) if ref['flattened'] values.each do |value| member(ref.shape.member.location_name || name, ref.shape.member, value) end else node(name, ref) do values.each do |value| mname = ref.shape.member.location_name || 'member' member(mname, ref.shape.member, value) end end end end
map(name, ref, hash)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 63 def map(name, ref, hash) key_ref = ref.shape.key value_ref = ref.shape.value node(name, ref) do hash.each do |key, value| node('entry', ref) do member(key_ref.location_name || 'key', key_ref, key) member(value_ref.location_name || 'value', value_ref, value) end end end end
member(name, ref, value)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 76 def member(name, ref, value) case ref.shape when StructureShape then structure(name, ref, value) when ListShape then list(name, ref, value) when MapShape then map(name, ref, value) when TimestampShape then node(name, ref, timestamp(value)) when BlobShape then node(name, ref, blob(value)) else node(name, ref, value.to_s) end end
node(name, ref, *args, &block)
click to toggle source
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 107 def node(name, ref, *args, &block) attrs = args.last.is_a?(Hash) ? args.pop : {} attrs = shape_attrs(ref).merge(attrs) args << attrs @builder.node(name, *args, &block) end
shape_attrs(ref)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 114 def shape_attrs(ref) if xmlns = ref['xmlNamespace'] if prefix = xmlns['prefix'] { 'xmlns:' + prefix => xmlns['uri'] } else { 'xmlns' => xmlns['uri'] } end else {} end end
structure(name, ref, values)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 25 def structure(name, ref, values) if values.empty? node(name, ref) else node(name, ref, structure_attrs(ref, values)) do ref.shape.members.each do |member_name, member_ref| next if values[member_name].nil? next if xml_attribute?(member_ref) member(member_ref.location_name, member_ref, values[member_name]) end end end end
structure_attrs(ref, values)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 39 def structure_attrs(ref, values) ref.shape.members.inject({}) do |attrs, (member_name, member_ref)| if xml_attribute?(member_ref) && values.key?(member_name) attrs[member_ref.location_name] = values[member_name] end attrs end end
timestamp(value)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 93 def timestamp(value) value.utc.iso8601 end
xml_attribute?(ref)
click to toggle source
# File lib/aws-sdk-core/xml/builder.rb, line 126 def xml_attribute?(ref) !!ref['xmlAttribute'] end