Sha256: 1cc25ac4f76a59bde88ce70dca407055d31b1546bc05ec379957926af115b20b

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

module TestXml
  module NokogiriExt
    module Node
      def match?(element, compare_value = false)
        if compare_value && element.leaf?
          comparable_attributes == element.comparable_attributes and equal_text?(element)
        else
          contains_elements_of?(element) &&
          element.elements.all? {|el| matches_at_least_one?(el, compare_value) }
        end
      end
      
      def elements
        children.collect {|node| node if node.element? }.delete_if {|node| node.nil?}
      end
      
      # Attributes of the current node.
      def comparable_attributes
        attributes.collect {|k,a| [k.downcase, a.value]}.sort
      end
      
      # Check if node is either childless, self-closing, or has content text. 
      def leaf?
        children.size == 0 or (children.size == 1 && children.first.text?)
      end

    private
      def equal_text?(element)
        content == element.content
      end

      def contains_elements_of?(element)
        element.elements.find {|el| not contains?(el)}.nil?
      end

      def contains?(element)
        children.find {|node| node.element? && node.name == element.name }
      end

      def matches_at_least_one?(element, compare_value)
        search(element.name).find { |el| el.match?(element, compare_value) }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
test_xml-0.1.0 lib/test_xml/nokogiri/node.rb