Sha256: bc32cd67b19511f6c257263ba573d2acecf4585c968c7026e8ef3bd604a9e4ac

Contents?: true

Size: 1.6 KB

Versions: 11

Compression:

Stored size: 1.6 KB

Contents

require 'nokogiri'

# = XmlMini Nokogiri implementation
module ActiveSupport
  module XmlMini_Nokogiri #:nodoc:
    extend self

    # Parse an XML Document string into a simple hash using libxml / nokogiri.
    # string::
    #   XML Document string to parse
    def parse(string)
      if string.blank?
        {}
      else
        doc = Nokogiri::XML(string) { |cfg| cfg.noblanks }
        raise doc.errors.first if doc.errors.length > 0
        doc.to_hash
      end
    end

    module Conversions
      module Document
        def to_hash
          root.to_hash
        end
      end

      module Node
        CONTENT_ROOT = '__content__'

        # Convert XML document to hash
        #
        # hash::
        #   Hash to merge the converted element into.
        def to_hash(hash = {})
          attributes = attributes_as_hash
          if hash[name]
            hash[name] = [hash[name]].flatten
            hash[name] << attributes
          else
            hash[name] ||= attributes
          end

          children.each { |child|
            next if child.blank? && 'file' != self['type']

            if child.text? || child.cdata?
              (attributes[CONTENT_ROOT] ||= '') << child.content
              next
            end

            child.to_hash attributes
          }

          hash
        end

        def attributes_as_hash
          Hash[*(attribute_nodes.map { |node|
            [node.node_name, node.value]
          }.flatten)]
        end
      end
    end

    Nokogiri::XML::Document.send(:include, Conversions::Document)
    Nokogiri::XML::Node.send(:include, Conversions::Node)
  end
end

Version data entries

11 entries across 11 versions & 5 rubygems

Version Path
activesupport_csi-2.3.5.p8 lib/active_support/xml_mini/nokogiri.rb
activesupport_csi-2.3.5.p7 lib/active_support/xml_mini/nokogiri.rb
activesupport_csi-2.3.5.p6 lib/active_support/xml_mini/nokogiri.rb
webroar-0.5.0 src/admin_panel/vendor/rails/activesupport/lib/active_support/xml_mini/nokogiri.rb
webroar-0.4.0 src/admin_panel/vendor/rails/activesupport/lib/active_support/xml_mini/nokogiri.rb
radiant-0.9.0.rc2 vendor/rails/activesupport/lib/active_support/xml_mini/nokogiri.rb
webroar-0.3.1 src/admin_panel/vendor/rails/activesupport/lib/active_support/xml_mini/nokogiri.rb
webroar-0.3.0 src/admin_panel/vendor/rails/activesupport/lib/active_support/xml_mini/nokogiri.rb
simply_stated-0.0.5 vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/xml_mini/nokogiri.rb
simply_stated-0.0.4 vendor/gems/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/xml_mini/nokogiri.rb
activesupport-2.3.5 lib/active_support/xml_mini/nokogiri.rb