class AWS::Core::Options::XMLSerializer
Given a hash of serialization rules, an XMLSerializer can convert a hash of request options into XML. The request options are validated before returning XML.
Attributes
http[R]
@return [Hash,nil]
namespace[R]
@return [String]
operation_name[R]
@return [String] Returns the name of the API operation.
rules[R]
@return [Hash]
validator[R]
@return [Validator]
Public Class Methods
new(namespace, operation_name, operation)
click to toggle source
@param [String] namespace @param [String] #operation_name @param [Hash] operation
# File lib/aws/core/options/xml_serializer.rb, line 28 def initialize namespace, operation_name, operation @namespace = namespace @operation_name = operation_name @rules = operation[:inputs] @http = operation[:http] @validator = Validator.new(rules) end
Public Instance Methods
serialize(request_options)
click to toggle source
@overload serialize!(request_options)
@param [Hash] request_options A hash of already validated request options with normalized values. @return [String] Returns an string of the request parameters serialized into XML.
# File lib/aws/core/options/xml_serializer.rb, line 56 def serialize request_options if http && http[:request_payload] payload = http[:request_payload] root_node_name = rules[payload][:name] params = request_options[payload] rules = self.rules[payload][:members] else root_node_name = "#{operation_name}Request" params = request_options rules = self.rules end xml = Nokogiri::XML::Builder.new xml.send(root_node_name, :xmlns => namespace) do |xml| hash_members_xml(params, rules, xml) end xml.doc.root.to_xml end
Protected Instance Methods
hash_members_xml(hash, rules, builder)
click to toggle source
# File lib/aws/core/options/xml_serializer.rb, line 100 def hash_members_xml hash, rules, builder xml_ordered_members(rules).each do |member_name| if hash.key?(member_name) value = hash[member_name] to_xml(builder, member_name, rules[member_name], value) end end end
to_xml(builder, opt_name, rules, value)
click to toggle source
# File lib/aws/core/options/xml_serializer.rb, line 76 def to_xml builder, opt_name, rules, value xml_name = rules[:name] xml_name ||= opt_name.is_a?(String) ? opt_name : Inflection.class_name(opt_name.to_s) case value when Hash builder.send(xml_name) do |builder| hash_members_xml(value, rules[:members], builder) end when Array builder.send(xml_name) do value.each do |member_value| to_xml(builder, 'member', rules[:members], member_value) end end else builder.send(xml_name, value) end end
xml_ordered_members(members)
click to toggle source
# File lib/aws/core/options/xml_serializer.rb, line 109 def xml_ordered_members members members.inject([]) do |list,(member_name, member)| list << [member[:position] || 0, member_name] end.sort_by(&:first).map(&:last) end