class AWS::Core::XML::RootFrame

def add_to_index index_name, key, value

def add_to_index index_name, key, value
  @indexes[index_name] ||= {}
  @indexes[index_name][key] = value
end

def build_child_frame element_name

def build_child_frame element_name
  Frame.new(self, self, element_name, rules)
end

def inflect element_name

The root frame maintains a cache of inflected element names.
def inflect element_name
  @inflected[element_name] ||= Inflection.ruby_name(element_name).to_sym
end

def initialize rules

def initialize rules
  @inflected = {}
  @indexes = {}
  setup_indexes(rules)
  super(self, nil, 'XML', rules)
end

def setup_indexes rules

that index values. Adds an empty index for each of these.
recursively crawls the parser rules and looks for elements
def setup_indexes rules
  if rules[:children]
    rules[:children].each_pair do |child_name,child_rules|
      if index = child_rules[:index]
        @indexes[index[:name]] = {}
      end
      setup_indexes(child_rules)
    end
  end
end

def value

def value
  value = @data.values.find{|v| v.is_a?(Hash) }
  value ||= {}
  value.merge(@indexes)
end