class AWS::Core::XML::Stub

This class takes the rules from an XML parser and then returns a stubbed reponse. This response has placeholder values based on the grammar, e.g.

This is used primarily to help with the AWS.stub! utility.

Attributes

rules[R]

@return [Hash]

Public Class Methods

new(rules) click to toggle source

@param [Hash] rules

# File lib/aws/core/xml/stub.rb, line 32
def initialize rules
  @rules = rules
end
simulate(rules) click to toggle source

Returns a hash with stubbed values as if it had parsed an empty xml document.

@param [Hash] rules An XML::Parser rule set. @return [Hash]

# File lib/aws/core/xml/stub.rb, line 56
def self.simulate rules
  stub = Stub.new(rules)
  stub.simulate
end

Public Instance Methods

simulate() click to toggle source

Returns a hash with stubbed values as if it had parsed an empty xml document.

@return [Hash]

# File lib/aws/core/xml/stub.rb, line 42
def simulate 
  if rules[:children]
    data = stub_data_for(rules)
    apply_empty_indexes(rules, data)
    data
  else
    {}
  end
end

Protected Instance Methods

apply_empty_indexes(rules, data) click to toggle source
# File lib/aws/core/xml/stub.rb, line 107
def apply_empty_indexes rules, data
  
  return unless rules[:children]
  
  rules[:children].each_pair do |name,child_rules|
    if index = child_rules[:index]
      data[index[:name]] = {}
    end
    apply_empty_indexes(child_rules, data)
  end

end
stub_data_for(rules, data = {}) click to toggle source
# File lib/aws/core/xml/stub.rb, line 62
def stub_data_for rules, data = {}
  rules[:children].each_pair do |name,child_rules|

    # skip ignored elements
    if child_rules[:ignore]
      stub_data_for(child_rules, data) if child_rules[:children]
      next
    end

    orig_data = data
    if wrapper = child_rules[:wrap]
      data[wrapper] ||= {}
      data = data[wrapper]
    end

    ruby_name = child_rules[:rename] || 
      Inflection.ruby_name(name.to_s).to_sym

    if child_rules[:list]
      data[ruby_name] = []
    elsif child_rules[:map]
      data[ruby_name] = {}
    elsif child_rules[:children] and !child_rules[:children].empty?
      data[ruby_name] = stub_data_for(child_rules)
    else
      data[ruby_name] = case child_rules[:type]
        when :integer  then 0 
        when :float    then 0.0
        when :time     then Time.now
        when :datetime then Date.parse(Time.now.to_s)
        when :boolean  then false
        else nil
      end
    end

    # restore data incase it was redirected for wrapping
    data = orig_data

  end

  data

end