class ActiveSupport::XmlMini_LibXMLSAX::HashBuilder - activesupport-4.2.3 Documentation

# class ActiveSupport::XmlMini_LibXMLSAX::HashBuilder

Class that will build the hash while the XML document is being parsed using SAX events.

### Constants

CONTENT_KEY
HASH_SIZE_KEY

### Attributes

hash[R]

### Public Instance Methods

current_hash() click to toggle source

    # File lib/active_support/xml_mini/libxmlsax.rb, line 20
    def current_hash
      @hash_stack.last
    end

on_cdata_block(string)
Alias for: on_characters
on_characters(string) click to toggle source

    # File lib/active_support/xml_mini/libxmlsax.rb, line 54
    def on_characters(string)
      current_hash[CONTENT_KEY] << string
    end

Also aliased as: on_cdata_block
on_end_document() click to toggle source

    # File lib/active_support/xml_mini/libxmlsax.rb, line 29
    def on_end_document
      @hash = @hash_stack.pop
      @hash.delete(CONTENT_KEY)
    end

on_end_element(name) click to toggle source

    # File lib/active_support/xml_mini/libxmlsax.rb, line 47
    def on_end_element(name)
      if current_hash.length > current_hash.delete(HASH_SIZE_KEY) && current_hash[CONTENT_KEY].blank? || current_hash[CONTENT_KEY] == ''
        current_hash.delete(CONTENT_KEY)
      end
      @hash_stack.pop
    end

on_start_document() click to toggle source

    # File lib/active_support/xml_mini/libxmlsax.rb, line 24
    def on_start_document
      @hash = { CONTENT_KEY => '' }
      @hash_stack = [@hash]
    end

on_start_element(name, attrs = {}) click to toggle source

    # File lib/active_support/xml_mini/libxmlsax.rb, line 34
    def on_start_element(name, attrs = {})
      new_hash = { CONTENT_KEY => '' }.merge!(attrs)
      new_hash[HASH_SIZE_KEY] = new_hash.size + 1

      case current_hash[name]
        when Array then current_hash[name] << new_hash
        when Hash  then current_hash[name] = [current_hash[name], new_hash]
        when nil   then current_hash[name] = new_hash
      end

      @hash_stack.push(new_hash)
    end