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.
Lists are stubbed with empty arrays
Indexes become empty hashes
Numeric types are returned as 0
etc
This is used primarily to help with the AWS.stub! utility.
@return [Hash]
@param [Hash] rules
# File lib/aws/core/xml/stub.rb, line 32 def initialize rules @rules = rules end
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
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
# 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
# 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