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

# class ActiveSupport::XmlMini_NokogiriSAX::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

cdata_block(string)
Alias for: characters
characters(string) click to toggle source

    # File lib/active_support/xml_mini/nokogirisax.rb, line 60
    def characters(string)
      current_hash[CONTENT_KEY] << string
    end

Also aliased as: cdata_block
current_hash() click to toggle source

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

end_document() click to toggle source

    # File lib/active_support/xml_mini/nokogirisax.rb, line 32
    def end_document
      raise "Parse stack not empty!" if @hash_stack.size > 1
    end

end_element(name) click to toggle source

    # File lib/active_support/xml_mini/nokogirisax.rb, line 53
    def 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

error(error_message) click to toggle source

    # File lib/active_support/xml_mini/nokogirisax.rb, line 36
    def error(error_message)
      raise error_message
    end

start_document() click to toggle source

    # File lib/active_support/xml_mini/nokogirisax.rb, line 27
    def start_document
      @hash = {}
      @hash_stack = [@hash]
    end

start_element(name, attrs = []) click to toggle source

    # File lib/active_support/xml_mini/nokogirisax.rb, line 40
    def start_element(name, attrs = [])
      new_hash = { CONTENT_KEY => '' }.merge!(Hash[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