module AWS::Core::Client::QueryXML

When a client class extends this module, its API configuration is parsed. For each operation in the API configuration, one client method is added.

Clients extending QueryXML all have in common their method of serializing request (input) paramters and parsing response (output) XML.

Public Class Methods

extended(base) click to toggle source

@private

# File lib/aws/core/client/query_xml.rb, line 29
def self.extended base
  base.send(:include, ErrorParser)
  base.send(:define_parsers)
end

Public Instance Methods

option_parsers() click to toggle source

@return [Hash<Symbol,OptionGrammar>] Returns a hash option

parsers.  Hash keys are client method names and hash
values are {OptionGrammar} objects.

@private

# File lib/aws/core/client/query_xml.rb, line 38
def option_parsers
  @option_parsers ||= {}
end
xml_parsers() click to toggle source

@return [Hash<Symbol,XML::Parser>] Returns a hash of xml

parsers.  Hash keys are client method names and hash
values are {XML::Parser} objects.

@private

# File lib/aws/core/client/query_xml.rb, line 46
def xml_parsers
  @xml_parsers ||= {}
end

Protected Instance Methods

define_client_method(method_name, operation_name) click to toggle source
# File lib/aws/core/client/query_xml.rb, line 66
def define_client_method method_name, operation_name
  add_client_request_method(method_name) do
  
    configure_request do |request, options|
  
      now = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
  
      request.headers['Content-Type'] = 
        'application/x-www-form-urlencoded; charset=utf-8'
  
      request.http_method = 'POST'
      request.add_param 'Timestamp', now
      request.add_param 'Version', self.class::API_VERSION
      request.add_param 'Action', operation_name
  
      parser = self.class.option_parsers[method_name]
      parser.request_params(options).each do |param|
        request.add_param(param)
      end
  
    end
  
    process_response do |response|
      parser = self.class.xml_parsers[method_name]
      response.data = parser.parse(response.http_response.body)
    end
  
    simulate_response do |response|
      parser = self.class.xml_parsers[method_name]
      response.data = parser.simulate
    end
  
  end
end
define_parsers() click to toggle source

Enumerates through the operations specified in the API configuration (yaml configuration file found in lib/api_config/) and defines one request method per operation.

# File lib/aws/core/client/query_xml.rb, line 55
def define_parsers
  api_config[:operations].each do |op|
  
    method_name = op[:method]
  
    option_parsers[method_name] = OptionGrammar.customize(op[:inputs])
    xml_parsers[method_name] = XML::Parser.new(op[:outputs])
  
  end
end